看起来GO语言中没有警告信息。从我的观察中得出以下几点: 1. "声明但未使用"(如果变量被声明但在任何地方都未被使用,则会产生错误并使程序无法编译) 2. "导入但未使用"(同样,如果包被导入但在任何地方都未被使用,则会产生错误并使程序无法编译) 能否有人提供帮助?如果他们有任何要点,请指教。
看起来GO语言中没有警告信息。从我的观察中得出以下几点: 1. "声明但未使用"(如果变量被声明但在任何地方都未被使用,则会产生错误并使程序无法编译) 2. "导入但未使用"(同样,如果包被导入但在任何地方都未被使用,则会产生错误并使程序无法编译) 能否有人提供帮助?如果他们有任何要点,请指教。
Go试图避免这种情况:
男孩在吸烟并在空气中吐烟圈,女孩因为烟雾而感到恼怒,对她的爱人说:"你看不见香烟盒上写的警告吗?吸烟有害健康!"
男孩回答道:"亲爱的,我是一名程序员。我们不关心警告,我们只关心错误。"
基本上,Go编程语言不会让你轻易地放过未使用的变量、未使用的导入以及其他通常是其他语言中的警告的内容。它帮助养成良好的习惯。
import unusedfoo;func a(x unusedfoo.bar){};...
,而不是 import unusedfoo //仅用于调试..
。 - Elazar Leibovich-Wall -Werror
)。这样你就可以确保不会忘记任何未使用的语句。 - Elazar LeibovichGo语言FAQ
未使用的变量可能指示存在错误,而未使用的导入包只会减慢编译速度。如果在代码中累积了足够多的未使用的导入包,编译速度会变得非常缓慢。因此,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.
....
}
对于未使用的导入,一种解决方案是使用goimports,它是gofmt的一个分支。它会自动添加缺失的导入并删除未使用的导入(另外还能格式化您的代码)。
我已经配置了我的编辑器,在保存代码时自动运行goimports。现在,我无法想象写go代码时没有它。根据我刚刚阅读的(维基百科),“Go的语法包括了从C语言中针对代码简洁和易读性的改变。”
“简洁”这个词对编译器来说非常重要。我发现编译器强制执行的语法不再是“\n”或空格不敏感的了。而且也没有“警告”类型的错误。
Go有好的地方,也有不太好的地方。不发出警告的态度有点极端,特别是在开发或测试新软件包时。似乎部分开发是不可接受的。警告也是不可接受的。只能是生产版本或者放弃。这是一种非常二元的观点。我想知道如果自然界受到这样的限制,进化是否会导致“生命”的出现。
我只能希望事情会改变。有时候死亡似乎非常有益。我尝试过Go,但我很失望。在我这个年龄,我不认为我会回头。