当前位置: 首页 > 面试题库 >

golang什么是导入副作用

高迪
2023-03-14
问题内容
import (
    _ "github.com/lib/pq"
    _ "image/png"
    ...
)

在有效的去它说,这些类型的进口平均副作用。我已经阅读了几个SO答案,但没有一个解释什么是import side effect。有人可以详细说明这个词import side effect吗?


问题答案:

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

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

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



 类似资料:
  • 我试图从文件“paddle.JS”中导入一个JS类,以便在另一个文件“game.JS”中使用(没有使用JS库或框架,只是纯简单的VanillaJS),我似乎不明白为什么这个导入/导出不起作用。我看过太多的例子和教程,我完全按照他们说的做,但它就是不起作用。这可能是一个愚蠢的问题,但任何帮助都是感激的。 这是我正在学习的一个YT教程,我基本上是在Paddle.js的顶部添加“导出默认类Paddle”

  • 本文向大家介绍优先副本是什么?它有什么特殊的作用?相关面试题,主要包含被问及优先副本是什么?它有什么特殊的作用?时的应答技巧和注意事项,需要的朋友参考一下 优先副本 会是默认的leader副本 发生leader变化时重选举会优先选择优先副本作为leader  

  • 问题内容: 据我了解,python模块永远不会导入两次,即该模块中的代码仅在首次导入时才执行。随后的import语句只需将模块添加到导入范围即可。 我有一个名为“ TiledConvC3D.py”的模块,但似乎已多次导入。我使用pdb在该模块的代码顶部打印堆栈。 这是从第一次执行模块开始的堆栈跟踪的结尾: 它将继续执行多次。但是,第二次调用的完整堆栈跟踪不会显示对的任何调用,因此不应执行这些执行:

  • 我一直在谷歌搜索它,但谷歌搜索关键字“?”也没那么好。我很想知道它是做什么的,什么时候用。 谢了! 我已经看过几次了,但这里有一个我刚刚看到的例子

  • 在PEP 8中--Python代码风格指南 明确的相对进口是绝对进口的一种可接受的替代方案 有人能详细解释一下吗?

  • 问题内容: 我已经回答了有关Python中绝对导入的问题,我认为基于阅读Python 2.5 changelog 和随附的PEP可以理解。但是,在安装Python 2.5并尝试制作正确使用的示例时,我意识到事情还不清楚。 直接从上面链接的更改日志,此语句准确总结了我对绝对导入更改的理解: 假设您有一个像这样的包目录: 这定义了一个名为的包,其中包含和子模块。 考虑main.py模块中的代码。如果执