第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

包的 `init()` 函數(shù)中的無限 for 循環(huán)——好還是壞主意?

包的 `init()` 函數(shù)中的無限 for 循環(huán)——好還是壞主意?

Go
皈依舞 2023-07-31 15:56:39
我想知道在包的函數(shù)中使用無限 for 循環(huán)是否是一個壞主意,或者是否應該避免這樣做。init()如果可以這樣做或應該避免這種情況,是否有人有任何知識或經(jīng)驗?你會在哪里使用這個?例如,這可以用于提供來自外部源的一些信息的包,這些信息必須定期刷新(例如每天一次)。我使用了如下類似的代碼,但沒有“看門狗”功能。這意味著init()剛剛啟動了一個 go 例程,該例程將在后臺運行,并在蜱到達時運行更新過程。不幸的是,這個更新機制在 aprox 之后停止工作。由于未知原因,3 個月了,但服務運行良好,只是使用“舊”數(shù)據(jù)。簡單示例實現(xiàn)完整示例請參見https://play.golang.org/p/k-GI1t9J4oPpackage infoimport (  "log"  "sync"  "time")var (  data map[string]interface{}  lock sync.RWMutex)func init() {  // ticker channel  ticker := time.NewTicker(1 * time.Second).C  // "watchdog" loop  for {    log.Println("Starting Update Loop")    var wg sync.WaitGroup    wg.Add(1)    // Start asyc update process.    go func() {      defer wg.Done() //notify wg when if process ends for whatever reason      // Loop forever      // Run when a tick is received from the `ticker` channel      for {        select {        case <-ticker:          log.Println("Update ticker received")          err := update()          if err != nil {            log.Printf("ERROR: %v\n", err.Error())          }        }      }    }()    wg.Wait()  }}// internal update function that retrieves some information from some external systemfunc update() error {  lock.Lock()  defer lock.Unlock()  log.Println("Update `data`")  // retrieve information and update `data`  return nil}// Public function to query datafunc GetInformation(key string) interface{} {  lock.RLock()  defer lock.RUnlock()  return data[key]}該代碼可以正常工作并在單元測試中運行良好,并且也可以正常運行。我想知道長期穩(wěn)定性(一年或更長的正常運行時間)等等。
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

它位于 goroutine 中,因此技術上沒有問題,但直接在 an 中實現(xiàn)行為init會使其非常難以使用,原因有兩個:

  1. 測試很難,就像main測試很難一樣。測試是否調(diào)用另一個函數(shù)要容易得多init,然后可以對其進行測試。

  2. 很難推理?!白詣印卑l(fā)生的事情越多,對于使用該包的任何開發(fā)人員(包括未來的你)來說,它的意義就越小。“好吧,我導入了這個包并使用了一個微小的函數(shù),現(xiàn)在不知怎的,我的 CPU 使用率從 1% 上升到了 50%,我做錯了什么”,這樣的事情將會出現(xiàn),需要更多的探索才能弄清楚。

TL;DR 不存在“長期穩(wěn)定性”問題,但很可能存在長期可維護性問題。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號