在go中导入时使用_有什么意义

时间:2015-06-04 00:44:09

标签: go

我在导入包时遇到了一种奇怪的语法:import _ fmt

我知道import f fmt就像这个包的别名一样,而且我知道_被用作一个不应该被关心的变量。

因此我猜不会在这里输入一个我不会使用的包。实际上看起来这就是这里发生的事情。

我无法理解的是为什么这可能会有所帮助。如果我使用for _, v := range(arr){}我使用_因为我没有选择,我需要向编译器指定它不应该担心我不会使用的变量。

但是如果我不打算使用一个包,我会省略它(如果以后可能会有用,我会评论它)。但没有理由将其编译并添加到源代码中。

那么使用这种语法是否有任何意义,或者这只是组合别名和未使用变量的无用工件?

1 个答案:

答案 0 :(得分:2)

这意味着您要为副作用导入它。它通常与包含init的包一起使用。当然你也可以正常导入它,但_表明你只想要副作用。

搜索"导入副作用"在Effective Go进行讨论。

一个非常常见的例子是net/http/pprof,它将一些新的处理程序附加到默认的多路复用器。像github.com/SlyMarbo/spdy这样的包以相同的方式使用它来静默修改默认的http客户端。