go-golangci-lint 检测http的警告,为什么对于PostForm Get这些官方封装的接口禁止使用呢?
1. 运行环境.
go 1.18
lint@1.50.1"">golangci-lint@1.50.1 使用默认检测项
2. 问题描述?
使用官方http库,调用PostForm Get等接口,总是检测警告,报告诸如
(net/http.Client).PostForm must not be called (noctx)go-golangci-lint
(net/http.Client).Get must not be called (noctx)go-golangci-lint
3. 您期望得到的结果?
为什么官方封装的接口要禁止使用呢?有时候使用这些接口是很方便的,即使不使用,自己写也是相同的代码。
先说是不是,再说为什么
首先go-golangci-lint并非
官方
工具,依据其readme所言:is a fast Go linters runner.
http.Get/Post 等方法并非是
官方
不让
用。是golangci-lint
不推荐、不建议直接
使用在
小
项目中,直接使用,是没有任何问题的,可以通过调整golangci-lint
的配置文件忽略这几项检查参考
https://github.com/sonatard/noctx#noctx-with-golangci-lint
在项目目录新建.golangci.yml
文件并设置内容如下根据以上配置可知
XXX must not be called
的报错,是由于http
请求没有使用context来进行控制,可能会引起不可预知的
风险和BUG。不够优雅
和健壮
正如其所给的DEMO一样
这么写,他认为是好的。
根据第三点,可得:
小
项目可以忽略这个问题。大项目(日请求外部接口几十万次)需要保证所有请求的上下文可控,要实现可根据需求中断等等等等需求的,需要使用context进行约束和控制。update - ps:
嫌使用原生包麻烦的,可以使用三方封装的更简单的包来使用。对原生包做了一系列的二次封装。如:
https://github.com/idoubi/goz