如果我有这样的程序:package mainimport "strconv"func main() { a, err := strconv.Atoi("100") println(a)}我得到这个结果,正如预期的那样:.\file.go:5:7: err declared but not used但是,此程序:package mainimport "strconv"func main() { a, err := strconv.Atoi("100") if err != nil { panic(err) } b, err := strconv.Atoi("100") println(a, b)}编译时没有错误,即使我从未检查过第二个值。为什么会发生这种情况?另外,我是否可以更改某些选项,以便这些错误导致编译时错误或警告?err
1 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
这是因为在第二种情况下,您正在重用现有变量,因此正在使用它。尽管有实例化和赋值运算符,但新变量不会实例化。err:=err
如果以不同的方式命名错误,例如:
func main() {
a, err := strconv.Atoi("100")
if err != nil {
panic(err)
}
b, err2 := strconv.Atoi("100")
println(a, b)
}
然后,您会看到这两种情况下的编译错误。
如果您不想更改代码,但仍希望收到有关此问题的通知,则需要依靠 go linter 而不是 go 编译器。Go有一个非常强大的linters生态系统,所以我不会特别推荐一个,但是在我的组织中,如果我编写这样的代码,我会从我们的linter中看到这样的错误:
scratch/test.go:10:2: ineffectual assignment to err (ineffassign)
b, err := strconv.Atoi("100")
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消