实际上,这种进口意味着副作用。 我已经阅读了几个SO答案,但没有一个解释什么是import side effect。 有人可以详细说明import side effect吗?

当他们说"导入副作用"时,它们实际上是指静态使用的代码/功能。意味着仅导入软件包将导致一些代码在应用程序启动时执行,从而使我的系统处于与未导入该软件包的状态不同的状态(例如在示例中注册处理程序的init()中的代码,它也可能放下配置文件,修改光盘上的资源,等等)。有效的go教程只是为了解释这一点,以说明开发人员可能要进行空白导入的原因。 import _"somepackageImNotUsingReally"

编辑:当我说init()时我要添加其他上下文; https://golang.org/doc/effective_go.html#init-任何导入的软件包在调用main之前都会调用其init方法。 init()中的任何内容都是副作用。我认为不可能有其他任何东西,因为常量之类的东西将位于包范围内,而不是全局范围,因此它不会重新定义常量或类似的东西。

EDIT2:如注释中所指出并在上面的init链接中所述,"在包中的所有变量声明都评估了其初始化程序之后,将调用它",这意味着像PackageScopeVar := unexportedInitializerThatWritesToDisc()这样的代码将运行并可能产生副作用。