当后者用 url.URL 初始化时,将上下文设置为请求

Set context to request when the later is initialised with a url.URL

我想创建一个 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

Requesttype好像没有这个字段

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

有办法解决这个问题吗?

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

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

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

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

req = req.WithContext(ctx)

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

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

的方法