首頁 > 後端開發 > Golang > 主體

為什麼 Go 需要對多值傳回明確賦值?

Mary-Kate Olsen
發布: 2024-11-06 18:24:03
原創
203 人瀏覽過

Why Does Go Require Explicit Assignment for Multi-Value Returns?

Go 多值回傳問題

在Go 中,從函數傳回多個值是常見語法做法,但可能會出現某些語法做法限制。讓我們探討為什麼以下代碼片段的行為不同:

有效代碼:

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}
登入後複製

無效代碼:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}
登入後複製

語法無效的原因:

第二個程式碼片段嘗試直接從地圖找all[id] 傳回兩個值。然而,Go 需要明確分配多個回傳值。

「Comma Ok」模式:

Go “Comma Ok”模式是一種提取值並傳回值的機制。存取映射鍵的布林指示符(通常名為 ok)。地圖、通道和類型斷言支援此模式。

在您的情況下,它是檢索到的值,並且present是一個布林值,指示該鍵是否存在於地圖中。逗號分隔的賦值 it,present := all[id] 隱式使用了這種模式。

理解 Unpack 方法:

Go 內部使用 unpack 方法來處理多重賦值。此方法根據運算元的模式(例如,對應索引、通道值、型別斷言)來決定賦值是否為「逗號 ok」情況。

預設情況下,unpack 方法僅允許逗號 ok 賦值當對左邊的兩個變數進行賦值時。這個限制是在 Checker.initVars() 方法中設定的。

結論:

Go 中的「comma ok」模式可以從映射、通道、和類型斷言。但是,需要明確分配回傳值,並且編譯器將逗號 ok 賦值限制為左側存在兩個變數的情況。

以上是為什麼 Go 需要對多值傳回明確賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!