未使用的变量可能表明存在错误,而未使用的导入只会减慢编译速度,随着时间的推移,当程序积累代码和程序员时,这种效果可能会变得非常重要。由于这些原因,Go拒绝编译带有未使用的变量或导入的程序,以短期的便利换取长期的构建速度和程序的清晰性。
尽管如此,在开发代码时,通常会临时创建这些情况,在程序编译之前必须将它们编辑掉,这很烦人。
有些人要求编译器选项关闭这些检查,或者至少将它们减少为警告。但是,没有添加这样的选项,因为编译器选项不应该影响语言的语义,而且Go编译器不报告警告,只报告阻止编译的错误。
没有警告有两个原因。首先,如果值得抱怨,就值得在代码中修复。(如果不值得修复,那就不值一提。)其次,让编译器生成警告可以鼓励实现对可能导致编译混乱的弱情况发出警告,掩盖应该修复的真正错误。
不过,解决这个问题很容易。在开发过程中,使用空白标识符让未使用的内容保持不变。
import "unused"
// This declaration marks the import as used by referencing an
// item from the package.
var _ = unused.Item // TODO: Delete before committing!
func main() {
debugData := debug.Profile()
_ = debugData // Used only during debugging.
....
}
现在,大多数Go程序员都使用goimports工具,它会自动重写一个Go源文件以获得正确的导入,从而消除了实际中未使用的导入问题。这个程序很容易连接到大多数编辑器,当Go源文件被编写时自动运行。
golang外文翻译计划golang.org/doc/faq#cre…