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. 您期望得到的结果?

为什么官方封装的接口要禁止使用呢?有时候使用这些接口是很方便的,即使不使用,自己写也是相同的代码。

4. 您实际得到的结果?

最佳答案

先说是不是,再说为什么

  1. 首先go-golangci-lint并非官方工具,依据其readme所言:is a fast Go linters runner.

  2. http.Get/Post 等方法并非是官方 不让用。是golangci-lint不推荐、不建议直接使用

  3. 项目中,直接使用,是没有任何问题的,可以通过调整golangci-lint的配置文件忽略这几项检查

    参考https://github.com/sonatard/noctx#noctx-with-golangci-lint在项目目录新建.golangci.yml文件并设置内容如下

     linters:
         enable-all: true
      disable:
          - noctx # 禁用noctx的检查
  4. 根据以上配置可知 XXX must not be called 的报错,是由于http请求没有使用context来进行控制,可能会引起不可预知的风险和BUG。不够优雅健壮

正如其所给的DEMO一样

file

这么写,他认为是好的。

根据第三点,可得:项目可以忽略这个问题。大项目(日请求外部接口几十万次)需要保证所有请求的上下文可控,要实现可根据需求中断等等等等需求的,需要使用context进行约束和控制。


update - ps:
嫌使用原生包麻烦的,可以使用三方封装的更简单的包来使用。对原生包做了一系列的二次封装。如:https://github.com/idoubi/goz

2年前 评论
yueix (楼主) 2年前
讨论数量: 2

先说是不是,再说为什么

  1. 首先go-golangci-lint并非官方工具,依据其readme所言:is a fast Go linters runner.

  2. http.Get/Post 等方法并非是官方 不让用。是golangci-lint不推荐、不建议直接使用

  3. 项目中,直接使用,是没有任何问题的,可以通过调整golangci-lint的配置文件忽略这几项检查

    参考https://github.com/sonatard/noctx#noctx-with-golangci-lint在项目目录新建.golangci.yml文件并设置内容如下

     linters:
         enable-all: true
      disable:
          - noctx # 禁用noctx的检查
  4. 根据以上配置可知 XXX must not be called 的报错,是由于http请求没有使用context来进行控制,可能会引起不可预知的风险和BUG。不够优雅健壮

正如其所给的DEMO一样

file

这么写,他认为是好的。

根据第三点,可得:项目可以忽略这个问题。大项目(日请求外部接口几十万次)需要保证所有请求的上下文可控,要实现可根据需求中断等等等等需求的,需要使用context进行约束和控制。


update - ps:
嫌使用原生包麻烦的,可以使用三方封装的更简单的包来使用。对原生包做了一系列的二次封装。如:https://github.com/idoubi/goz

2年前 评论
yueix (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!