import (
_ "github.com/lib/pq"
_ "image/png"
...
)
Run Code Online (Sandbox Code Playgroud)
在有效的去它说,这些类型的进口意味着副作用.我已经阅读了几个SO答案,但没有人解释什么是答案import side effect.有人可以详细说明这个词import side effect吗?
eva*_*nal 13
当他们说'导入副作用'时,他们实质上指的是静态使用的代码/功能.意思是只是导入包会导致一些代码在app上执行,使我的系统处于不同于导入该包的状态(就像init()在他们的示例中的代码寄存器处理程序中的代码,它也可以放置配置文件,修改光盘上的资源等.有效的go教程解释这只是为了说明开发人员可能想要进行空白导入的原因,即;import _ "somepackageImNotUsingReally"
编辑:当我说init()我指的是这种方法时,添加额外的上下文; https://golang.org/doc/effective_go.html#init - 任何导入的包都会在调用main之前调用它们的init方法.无论是什么都是init()副作用.我不认为可以有任何其他因为常量之类的东西将在包范围内,而不是全局范围,所以它不会重新定义常量或类似的东西.
EDIT2:正如在注释中所指出并在上面的init链接中解释的那样"在包中的所有变量声明已经评估了它们的初始化器之后被调用"意味着代码PackageScopeVar := unexportedInitializerThatWritesToDisc()将会运行并且可能有副作用.