結構體賦值中的類型推斷
Go 中的類型推斷是一個方便的功能,允許您在某些情況下省略顯式類型註解。但是,當為結構化類型的欄位賦值時,可能會出現某些限制。
考慮以下程式碼片段:
i := 10 next := 11 prev, i := i, next
這裡,對 i 的賦值推斷了 prev 的類型並聲明它為 int。
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
但是,在此程式碼中,對 f.Bar 的賦值無法推斷出上一頁相反,它會產生錯誤:「:=」左邊的非名稱。
為什麼會發生這種情況?事實證明,結構類型 (Foo) 的存在擾亂了類型推論過程。在簡單的賦值中(如第一個程式碼片段),類型推斷依賴於上下文來確定所賦值變數的類型。然而,在第二個程式碼片段中,結構體的存在創建了一個具有多個組件的表達式,使得類型推斷不明確。
這是 Go 中的錯誤嗎?事實證明,這是一個已在問題6842 中討論過的已知問題:
問題6842:規範:使用短聲明符號分配給字段
問題仍未解決,顯示此行為是有意為之。若要解決此限制,您可以明確鍵入註解 prev 變數或使用更長的賦值形式,例如 f.Bar = next。
以上是為什麼 Go 的型別推斷在結構體字段賦值時失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!