首頁 > 後端開發 > Golang > 為什麼 Go 的型別推斷在結構體字段賦值時失敗?

為什麼 Go 的型別推斷在結構體字段賦值時失敗?

Susan Sarandon
發布: 2024-12-21 01:16:13
原創
926 人瀏覽過

Why Does Go's Type Inference Fail with Struct Field Assignments?

結構體賦值中的類型推斷

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板