我在导入包时遇到了一种奇怪的语法:import _ fmt
。
我知道import f fmt
就像这个包的别名一样,而且我知道_
被用作一个不应该被关心的变量。
因此我猜不会在这里输入一个我不会使用的包。实际上看起来这就是这里发生的事情。
我无法理解的是为什么这可能会有所帮助。如果我使用for _, v := range(arr){}
我使用_
因为我没有选择,我需要向编译器指定它不应该担心我不会使用的变量。
但是如果我不打算使用一个包,我会省略它(如果以后可能会有用,我会评论它)。但没有理由将其编译并添加到源代码中。
那么使用这种语法是否有任何意义,或者这只是组合别名和未使用变量的无用工件?
答案 0 :(得分:2)
这意味着您要为副作用导入它。它通常与包含init
的包一起使用。当然你也可以正常导入它,但_
表明你只想要副作用。
搜索"导入副作用"在Effective Go进行讨论。
一个非常常见的例子是net/http/pprof
,它将一些新的处理程序附加到默认的多路复用器。像github.com/SlyMarbo/spdy
这样的包以相同的方式使用它来静默修改默认的http客户端。