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

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

WBOY
發布: 2024-02-06 09:18:09
轉載
738 人瀏覽過

为什么人们在 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板