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. 您期望得到的结果?
为什么官方封装的接口要禁止使用呢?有时候使用这些接口是很方便的,即使不使用,自己写也是相同的代码。

关于 LearnKu
先说是不是,再说为什么
首先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