如何避免来自Golang的“声明和未使用”恼人的错误

我正在学习Golang,但是我觉得在编译的时候,我不应该留下任何variables或者包没有使用。

这实在让我放慢了脚步。 例如,我只是想声明一个新的包,并计划稍后使用它,或者只是取消注释某些命令来testing。 我总是得到错误,需要评论所有这些用途。

Golang有没有办法避免这种检查?

这个错误是在这里强迫你写更好的代码,并确保使用你声明或导入的一切。 它使读取其他人编写的代码变得更加容易(您始终确信将使用所有已声明的variables),并避免一些可能的死代码。

但是,如果您确实想要跳过此错误,则可以使用空白标识符 ( _ ):

 package main import ( "fmt" // imported and not used: "fmt" ) func main() { i := 1 // i declared and not used } 

 package main import ( _ "fmt" // no more error ) func main() { i := 1 // no more error _ = i } 

正如kostix在下面的评论中所说的,你可以在FAQ中findGo团队的官方位置: “未使用的variables的存在可能表示一个错误,而未使用的导入只会减慢编译的速度。在代码中积累足够多的未使用的导入树和事情会变得非常缓慢,由于这些原因,Go也不允许。

您可以使用一个简单的“空函数”,例如:

 func Use(vals ...interface{}) { for _, val := range vals { _ = val } } 

你可以这样使用:

 package main func main() { a := "declared and not used" b := "another declared and not used" c := 123 Use(a, b, c) } 

还有一个这样的包,所以你不必每次都定义Use函数:

 import ( "github.com/lunux2008/xulu" ) func main() { // [..] xulu.Use(a, b, c) } 

根据常见问题解答 :

一些人已经要求编译器选项closures这些检查,或至less减less他们的警告。 但是,这样的选项还没有被添加,因为编译器选项不应该影响语言的语义,因为Go编译器不会报告警告,只会报告阻止编译的错误。

没有警告有两个原因。 首先,如果值得抱怨的话,值得在代码中修复。 (如果不值得修复,则不值得一提)。其次,让编译器生成警告,鼓励实现警告弱的情况,这可能会导致编译噪音,掩盖真正的错误,应该修复。

我不一定同意这种不值得进入的各种原因。 事情就是这样,在不久的将来也不可能改变。

对于软件包来说, goimports工具会自动添加丢失的软件包并删除未使用的软件包。 例如:

 # Install it $ go get golang.org/x/tools/cmd/goimports # -w to write the source file instead of stdout $ goimports -w my_file.go 

你应该可以从任何中途体面的编辑器运行这个 – 例如Vim:

 :!goimports -w % 

goimports页面列出了其他编辑器的一些命令,并且通常将其设置为在将缓冲区保存到磁盘时自动运行。

请注意, goimports也将运行gofmt


正如已经提到的那样,对于variables来说,最简单的方法是(临时)将它们分配给_

 // No errors your_mother := "was a hamster" your_father := "smells of elderberries" // Commented out for debugging //insult(your_mother, your_father) _, _ = your_mother, your_father 

迄今尚未提及的一个angular度是用于编辑代码的工具集。

使用Visual Studio代码以及来自lukehoban的名为Go的扩展将为您执行一些自动魔法。 Go扩展自动运行gofmtgolint等,并删除和添加import条目 。 所以至less现在这个部分是自动的。

我会承认这个问题不是100%的解决scheme,但是这个问题还是有用的。