亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

init() 函數可以安全地啟動 go 例程,包括測試嗎?

init() 函數可以安全地啟動 go 例程,包括測試嗎?

Go
紫衣仙女 2023-07-10 16:22:39
我有一個應用程序。它創建一個 HTTP 服務來監聽一些連接點,我們可以用它來檢查應用程序狀態。該服務在后臺運行(帶有 go 例程)。它在函數中被初始化,init()其中包括:func?init()?{ ????... ????initHttpEndPoints(); ????... }在測試此應用程序時,在函數中創建 go 例程是否會init()導致問題?我問這個問題是因為看起來我的測試重新運行了init()第二次,我想知道為什么會這樣以及副作用可能是什么......(如果所有的 go 例程突然都發生的話,可能不太好重復。)注意:完整的應用程序。在函數中創建數百個 go 例程init()。我使用 HTTP 端點作為示例。強烈相關的答案:測試是否同時運行?
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

除了 icza 的答案之外,聽起來您init()對軟件包的使用不正確testing。

init()您應該定義 function ,而不是使用它來初始化測試所需的東西TestMain()。


查看完整回答
反對 回復 2023-07-10
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

規格:包初始化:

包初始化(變量初始化和 init 函數的調用)發生在單個 goroutine 中,按順序一次一個包。init 函數可以啟動其他 goroutine,這些 goroutine 可以與初始化代碼同時運行。然而,初始化總是對 init 函數進行排序:在前一個函數返回之前,它不會調用下一個函數。

從函數啟動 goroutine 沒有任何問題init(),但您必須記住這些 goroutine 與初始化過程同時運行,因此例如您不能假設有關(當前)包的初始化狀態的任何信息。

如果您看到您的init()函數多次運行,則很可能是多個測試單獨運行。init()函數在包的生命周期內僅運行一次。


查看完整回答
反對 回復 2023-07-10
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號