有没有一个工具可以检测到这种使用nil接口导致运行时崩溃的情况



以下代码导致SIGSEGV错误。有没有像linters这样的工具可以标记这种糟糕的逻辑?

package main
// Person is ...
type Person interface {
M()
}
func main() {
var i Person
i.M()
}

goint没有检测到这一点。

因为编译器在编译时不知道底层的具体类型i有什么。考虑这个例子:

func main() {
var i Person
if gender == "woman" {
i = &Woman{}
}
i.M()
}

因为编译器在编译时不知道gender的值,所以它也不知道&Woman{}是被分配给i,还是被保留为Person接口的零值,即nil

这不是一个无效的用法。变量i绑定到值为nil的接口Person

访问字段或调用nil接口值上的方法将导致恐慌,正如所观察到的那样。

相关内容

  • 没有找到相关文章

最新更新