0

我想创建一个net/url.URL然后在http.Clienthttp.Request构造中使用它,如下所示

    client := http.Client{
        Timeout: 5 * time.Second,
    }
    req := http.Request{
        URL: someKindOf_url.URL_type_I_have_already_initialised_elsewhere,
    }
    resp, err := client.Do(&req)

req施工时,我想通过一个(已经存在的)context.Context

Request 类型似乎没有这样的字段。

有这个NewRequestWithContext工厂函数,但使用字符串URL而不是net/url.URL

有没有解决的办法?

4

2 回答 2

3

http.Request您永远不应该使用文字创建对象。始终使用构造函数NewRequestNewRequestWithContext. 构造函数所做的不仅仅是简单地为结构分配简单的值。

考虑到这一点,实现目标的正确方法是,例如:

req := http.NewRequestWithContext(ctx, http.MethodGet, someKindOf_url.String(), nil)

也就是说,您可以为现有请求分配上下文:

req = req.WithContext(ctx)
于 2021-08-11T10:39:48.937 回答
0

http.Request没有公共上下文字段,但将其设为私有。

你可以做的是使用WithContext(ctx context.Context)方法http.Request

于 2021-08-11T10:40:16.750 回答