去语言警告和错误

Anu*_*rma 10 go

GO语言似乎没有警告.我观察到很少的情况.1."声明并且未使用"(如果声明变量并且在任何地方都没有使用它会产生错误并且不编译程序)2."导入但未使用"(类似地,如果导入包而不在任何地方使用它会产生错误并且不编译程序)有人可以帮助.如果他们有任何指针.

Dai*_*air 13

Go正试图阻止这种情况:

男孩正在抽烟,并将烟圈留在空中.女孩对烟雾感到恼火,并对她的情人说:"难道你看不到香烟上写的警告,吸烟对健康有害!"

男孩回答说:"亲爱的,我是程序员.我们不担心警告,我们只担心错误."

基本上,Go只是不会让你逃避未使用的变量和未使用的导入和其他通常是其他语言警告的东西.它有助于养成良好的习惯.

  • 它并不能防止坏习惯.它培养了一种不同的坏习惯.而不是`import unusedfoo //仅调试..`,他们写`import unusedfoo; func a(x unusedfoo.bar){}; ...`. (15认同)

pet*_*rSO 13

Go编程语言常见问题解答

我可以停止关于我未使用的变量/导入的这些投诉吗?

存在未使用的变量可能表示存在错误,而未使用的导入只会减慢编译速度.在代码树中累积足够多的未使用的导入,事情会变得非常缓慢.由于这些原因,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.
    ....
}
Run Code Online (Sandbox Code Playgroud)

  • 无论他们在文档中如何解释,这都是一个弱点。该语言的目的是提高程序员的生产力。必须注释掉测试代码中使用的包以及测试变量的所有实例,而不仅仅是更改编译器上的标志,这肯定会降低程序员的工作效率。 (2认同)