Closed huangjunwen closed 3 years ago
想法不错👍,但是什么场景回使用到呢?
我这里主要有两个场景会需要:
func loginHandler(w http.ResponseWriter, r *http.Request) {
// 目前是这样的,Login 这个操作没办法传入当前上下文
loginResp, err := weapp.Login(appId, appSecret, code)
// ...
}
若能添加自定义 HTTPClient,则我有很多方法可以实现,例如
type ctxClient struct {
ctx context.Context
}
func (client *ctxClient) Do(req *http.Request) (*http.Response, error) {
// 附着上下文然后请求
return http.DefaultClient.Do(req.WithContext(client.ctx))
}
func loginHandler(w http.ResponseWriter, r *http.Request) {
// ...
loginResp, err := weapp.LoginEx(&ctxClient{r.Context()}, appId, appSecret, code)
}
当然要实现这个的话还有另外一种更简单的方式,那就是直接给 Login 添加 context 参数,例如:
func loginHandler(w http.ResponseWriter, r *http.Request) {
loginResp, err := weapp.LoginCtx(r.Context(), appId, appSecret, code)
// ...
}
复议,内置client每次请求都调用httpClient()
创建,不能充分利用http keepalive特性
复议,内置client每次请求都调用
httpClient()
创建,不能充分利用http keepalive特性
已经在筹划 v3 ,到时候会放进去;这个版本不太好改了。
新版本v3
已经添加
现在库里的所有 http 请求都是直接调用
http.Get
或者http.Post
的,如果想要在做这些请求前后做一些操作没法实现,所以希望能添加大致这样的功能:然后添加例如
Login 则改造成
如接受我可以提交 PR,谢谢