Go 中的多值回傳問題
在 Go 中,可以使用多重賦值從函數傳回多個值。但是,需要滿足一些特定要求。
考慮以下程式碼:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] // Valid comma ok assignment pattern return it, present }
此程式碼正確使用「comma ok」模式從地圖中取得多個值抬頭。目前的布林值指示是否在映射中找到該鍵。
但是,以下程式碼無效:
func FindUserInfo(id string) (Info, bool) { return all[id] // Invalid, without a comma ok expression }
編譯器將此標記為錯誤,指出存在多個要傳回值,但只分配了一個變數。出現此錯誤的原因是 Go 要求對所有回傳值進行明確賦值。
為了詳細說明此錯誤,Go 語言使用「類型等效」規則進行賦值。在大多數情況下,這意味著將一種類型的值分配給另一種類型的變數將導致編譯時錯誤。但是,訪問映射時會出現異常。
存取映射會傳回一個二值元組:基礎值和指示是否找到該鍵的布林值。該元組通常使用“comma ok”模式分配給一對變數。
Go 編譯器專門設計為允許這種模式,即使它似乎違反了類型等效規則。因此,如果不使用逗號 ok 表達式,則無法將映射值直接指派給多個變數。
在您的情況下,您可以透過確保在存取 a 時始終使用逗號 ok 模式來避免使用臨時變數。地圖。這可確保正確分配多個值,且編譯器不會標記任何錯誤。
以上是為什麼 Go 需要「Comma Ok」模式來從 Map Access 傳回多個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!