为了账号安全,请及时绑定邮箱和手机立即绑定

“错误声明但未使用”,并有多个错误

“错误声明但未使用”,并有多个错误

Go
有只小跳蛙 2022-09-05 15:29:53
如果我有这样的程序: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")


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信