我有一個應用程序。它創建一個 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 關注
- 128 瀏覽
添加回答
舉報
0/150
提交
取消