golang什么是进口副作用

时间:2015-09-08 19:09:49

标签: go

import (
    _ "github.com/lib/pq"
    _ "image/png"
    ...
)

effective go中,它说这些进口意味着副作用。我已经阅读了几个SO答案,但没有人解释什么是import side effect。有人可以详细说明import side effect这个词吗?

1 个答案:

答案 0 :(得分:9)

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

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

EDIT2:正如在注释中指出并在上面的init链接中解释的那样“在包中的所有变量声明都评估了它们的初始值设定项之后调用”意味着像PackageScopeVar := unexportedInitializerThatWritesToDisc()这样的代码将运行并且可能有副作用。 / p>