Golang Go语言中 nil 检查 有什么好的工具吗

发布于 1周前 作者 yibo5220 来自 Go语言

背景

golang 新手,写代码时有时候会忘记对 nil 做检查。比如,如下场景:

  1. 变量没有初始化,包括:map ,自定义接口体
  2. 函数没有对入参做 nil 检查
  3. 遇到错误没有 return ,导致后续使用到 nil

写完这三点意识到这种错误太基础了,但是不过是自己写的,还是别人写的,确实都遇到过以上错误。所以想问的是大家有什么 nil 检查工具。

调研

在 github 找到 uber 的 nilaway,试用了下,假阳性太高,不具备可用性,但奇怪为啥 star 那么多(3.2k).


Golang Go语言中 nil 检查 有什么好的工具吗

更多关于Golang Go语言中 nil 检查 有什么好的工具吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

GoLand 的话, 设置 Editor | Inspections | Go | Data flow analysis (experimental) | Potential nil dereference 提示等级到Error, 有那么一点用. 搭配 Qodana analysis 的话, 可以规避很大部分的新手空指针错误

更多关于Golang Go语言中 nil 检查 有什么好的工具吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Uber 开了一个 nilaway 的库,他现在还处于活跃开发期,有大厂背书,关注一下。不过自己之前测试了一下,复杂一点的项目 false positive 还是有点多。https://github.com/uber-go/nilaway

在Golang中,针对nil检查,有几个值得推荐的工具和方法,以下是一些专业建议:

首先,Uber开源的NilAway是一个实用的nil恐慌检测工具。它通过复杂的过程间静态分析和推理技术来自动检测nil恐慌,帮助开发人员定位并修复潜在的nil引用问题。NilAway的设计目标是让开发人员没有注释负担,对本地和CI构建时间的影响保持最小,并以符合Go语言习惯的方式解决挑战。

其次,golangci-lint也是一个强大的Go语言代码检查工具,它能够并行运行多个代码检查器,包括一些能够检测nil引用的检查器。通过配置golangci-lint,可以自动检查代码中的nil引用问题,并输出详细的报告。

此外,对于开发人员来说,掌握Go语言中的nil判断方法也是至关重要的。在Go语言中,可以直接使用“== nil”来判断指针、切片、映射、通道、接口和函数类型的变量是否为nil。对于更复杂的场景,还可以使用反射机制或类型断言来判断变量是否为nil。

综上所述,NilAway和golangci-lint是Golang中进行nil检查的有效工具,同时掌握Go语言中的nil判断方法也是提升代码健壮性的关键。

回到顶部