我有一个应用程序。它创建一个 HTTP 服务来监听一些连接点,我们可以用它来检查应用程序状态。该服务在后台运行(带有 go 例程)。它在函数中被初始化,init()其中包括:func init() {
...
initHttpEndPoints();
...
}在测试此应用程序时,在函数中创建 go 例程是否会init()导致问题?我问这个问题是因为看起来我的测试重新运行了init()第二次,我想知道为什么会这样以及副作用可能是什么......(如果所有的 go 例程突然都发生的话,可能不太好重复。)注意:完整的应用程序。在函数中创建数百个 go 例程init()。我使用 HTTP 端点作为示例。强烈相关的答案:测试是否同时运行?
2 回答
冉冉说
TA贡献1877条经验 获得超1个赞
除了 icza 的答案之外,听起来您init()
对软件包的使用不正确testing
。
init()
您应该定义 function ,而不是使用它来初始化测试所需的东西TestMain()
。
慕慕森
TA贡献1856条经验 获得超17个赞
规格:包初始化:
包初始化(变量初始化和 init 函数的调用)发生在单个 goroutine 中,按顺序一次一个包。init 函数可以启动其他 goroutine,这些 goroutine 可以与初始化代码同时运行。然而,初始化总是对 init 函数进行排序:在前一个函数返回之前,它不会调用下一个函数。
从函数启动 goroutine 没有任何问题init()
,但您必须记住这些 goroutine 与初始化过程同时运行,因此例如您不能假设有关(当前)包的初始化状态的任何信息。
如果您看到您的init()
函数多次运行,则很可能是多个测试单独运行。init()
函数在包的生命周期内仅运行一次。
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消