我正在閱讀一些開源go項目,發現有很多程式碼實作如下:
for id, s := range subscribers { go func(id string, s *hellosaidsubscriber) { select { case <-s.stop: unsubscribe <- id return default: } select { case <-s.stop: unsubscribe <- id case s.events <- e: case <-time.after(time.second): } }(id, s) }
在上面的程式碼中,內部函數 go func...(id, s)
看起來沒有必要。換句話說,如果我寫如下程式碼會有什麼不同:
for id, s := range subscribers { select { case <-s.stop: unsubscribe <- id return default: } select { case <-s.stop: unsubscribe <- id case s.events <- e: case <-time.After(time.Second): } }
在您的第一個範例中,這是一個匿名函數 go
關鍵字使其充當goroutine,這是Go 中的並發模式。因此匿名函數(goroutine)內的程式碼將同時處理。
在第二個範例中,排除 goroutine 意味著程式碼將按順序運行。
匿名函數是不包含任何名稱的函數。當您想要建立內聯函數時經常使用它。它可以形成閉合。匿名函數也稱為函數文字。
以上是為什麼人們在 golang 中使用內部函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!