为了账号安全,请及时绑定邮箱和手机立即绑定

golang 什么是导入副作用

golang 什么是导入副作用

Go
慕码人2483693 2021-11-08 10:56:36
import (    _ "github.com/lib/pq"    _ "image/png"    ...)在有效的去它说这些进口意味着副作用。我已经阅读了几个 SO 答案,但没有一个解释什么是import side effect. 有人可以详细说明这个词import side effect吗?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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

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

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


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信