如果存在未使用的变量,表示可能存在错误,而未使用的导入还会减慢编译速度,随着时间的推移,代码积累的越来越多,这种影响会变得很大。由于这些原因,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 源文件时自动运行。