是否有一个 go linter 可以发现“nil 指针取消引用”潜在的恐慌?

Nik*_*kin 5 go

这是一个简单的例子:

package main

import "fmt"

type A struct {
    Name *string
}

type B struct {
    A *A
}

func main() {
    deref(&B{})
}

func deref(b *B) {
    fmt.Println(*b.A.Name) // panic: nil pointer dereference
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种可以找到此类情况的解决方案。Jetbrains Goland 中有一个“nillness 检查”,但它不会检查这个问题。

小智 6

我在其他地方问过你的问题 [1],并得到了这样的答复:

检测全部nil指针取消引用是不可能的,而且我们通常不会容忍误报。计算起来也相当昂贵。

检测琐碎的事情nil像这样的简单的指针取消引用是不值得的,因为即使对代码进行了少量添加,它们也不再容易检测到。

我们确实有SA5011,它标记了一种特定类型的潜在nil指针取消引用,尽管这对您的示例没有帮助。

  1. https://github.com/dominikh/go-tools/issues/1035