当后者用 url.URL 初始化时,将上下文设置为请求
Set context to request when the later is initialised with a url.URL
我想创建一个 net/url.URL
然后在 http.Client
和 http.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
type好像没有这个字段
有这个 NewRequestWithContext
工厂 function,但是 URL
使用字符串而不是 net/url.URL
有办法解决这个问题吗?
您永远不应该使用文字创建 http.Request
对象。始终使用构造函数 NewRequest
或 NewRequestWithContext
。构造函数 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
的方法
我想创建一个 net/url.URL
然后在 http.Client
和 http.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
type好像没有这个字段
有这个 NewRequestWithContext
工厂 function,但是 URL
使用字符串而不是 net/url.URL
有办法解决这个问题吗?
您永远不应该使用文字创建 http.Request
对象。始终使用构造函数 NewRequest
或 NewRequestWithContext
。构造函数 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