此检查可以检测潜在的 nil 解引用,并考虑所有函数调用。 该分析是跨过程的,并且会考虑整个项目中的调用,包括不同软件包之间的调用。

示例:


package a

func CreateUser(name string) *User {
  if isValid(name) {
    return &User{Name: name}
  }
  return nil
}

package main

func main() {
	user := CreateUser("NilDereference")
	print(user.Name) // 潜在的 nil 解引用
}

在提供的示例中,user 是指向 User 结构体的指针,但它可能为 nil,因为 CreateUser 可能会返回nil。 尝试解引用 user 以访问 Name 而不检查 user 是否为 nil 会导致运行时错误。