首頁 >後端開發 >Golang >為什麼人們在 golang 中使用內部函數?

為什麼人們在 golang 中使用內部函數?

WBOY
WBOY轉載
2024-02-06 09:18:09734瀏覽

为什么人们在 golang 中使用内部函数?

問題內容

我正在閱讀一些開源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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除