首頁 >後端開發 >Golang >為什麼使用短變數宣告分配給結構體欄位時 Go 無法推斷類型?

為什麼使用短變數宣告分配給結構體欄位時 Go 無法推斷類型?

Susan Sarandon
Susan Sarandon原創
2024-12-18 12:06:10730瀏覽

Why Does Go Fail to Infer Types When Assigning to Struct Fields Using Short Variable Declarations?

Go 無法推斷賦值中的類型:了解問題

此問題涉及向結構體字段賦值時遇到的類型推斷錯誤在Go 中使用短聲明表示法。

問題

考慮以下程式碼片段:

i := 10
next := 11
prev, i := i, next

此程式碼按預期工作,推斷 prev 和 i 的正確類型。然而,一個涉及結構體字段賦值的看似相似的片段無法輸入 infer:

type Foo struct {
    Bar int
}

f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next

這一次,Go 抱怨“:=”左側有一個非名稱。

解釋

區別在於,當使用短聲明語法分配給結構體字段時, Go 期望左側是結構體名稱,後跟一個點(.) 和字段名稱。例如,f.Bar。然而,單獨的 f 並不是有效的賦值左側。

使用短聲明表示法分配給結構體字段的正確方法是:

f.Bar, prev = next, f.Bar

這個語法清楚地表明了結構體名稱、欄位名稱和賦值

這是一個錯誤嗎?

這裡討論的行為不是一個錯誤。這是短聲明符號的限制。然而,Go 問題追蹤器上有一個未解決的問題(問題 6842),建議擴展短聲明語法以允許分配給結構體字段。在此問題解決之前,建議使用上面顯示的更詳細的替代方案。

以上是為什麼使用短變數宣告分配給結構體欄位時 Go 無法推斷類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn