當嘗試在 Go 中傳回多個值時,為什麼某些語法有效而其他語法無效似乎令人困惑。為了說明這一點,請考慮以下兩個程式碼片段:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
第一個程式碼片段有效並傳回 Info 和 bool 值。但是,第二個片段無效:
func FindUserInfo(id string) (Info, bool) { return all[id] }
這就提出了一個問題:為什麼第一個片段有效而第二個片段無效。此外,人們可能想知道是否有一種方法可以避免使用像 it 和present 這樣的臨時變數。
理解這種行為的關鍵在於「comma好的」模式。在 Go 中,存取映射時,結果是一對值:與鍵關聯的值和指示該鍵是否存在於映射中的布林值。這通常用於區分遺失的鍵和零值。
在第一個程式碼片段中,all[id] 表達式傳回一對值,這些值被指派給它並存在。然後 return 語句傳回這些值。
編譯器在決定多值賦值是否有效方面發揮作用。如果函數傳回多個值,但左側的接收者只有一個變量,編譯器將發出錯誤。這是因為編譯器期望傳回的值的數量與接收它們的變數的數量相符。
在第二個程式碼片段的情況下,return all[id] 表達式只傳回一個值,這是不相容的左側有兩個變數。因此,編譯器會報告錯誤。
不幸的是,當 Go 函數中傳回多個值時,無法避免使用臨時變數。這是因為編譯器要求傳回值的數量與接收它們的變數的數量相符。但是,可以透過使用命名回傳值或傳回結構來最大限度地減少臨時變數的使用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3