猿问

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

如果我有这样的程序:


package main

import "strconv"


func main() {

   a, err := strconv.Atoi("100")

   println(a)

}

我得到这个结果,正如预期的那样:


.\file.go:5:7: err declared but not used

但是,此程序:


package main

import "strconv"


func main() {

   a, err := strconv.Atoi("100")

   if err != nil {

      panic(err)

   }

   b, err := strconv.Atoi("100")

   println(a, b)

}

编译时没有错误,即使我从未检查过第二个值。为什么会发生这种情况?另外,我是否可以更改某些选项,以便这些错误导致编译时错误或警告?err


有只小跳蛙
浏览 79回答 1
1回答

元芳怎么了

这是因为在第二种情况下,您正在重用现有变量,因此正在使用它。尽管有实例化和赋值运算符,但新变量不会实例化。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")
随时随地看视频慕课网APP

相关分类

Go
我要回答