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