此代碼段按預期工作play.golang.org/p/VuCl-OKMavi := 10next := 11prev, i := i, next然而,這個幾乎相同的片段給出了non-name f.Bar on left side of := play.golang.org/p/J8NNWPugQGtype Foo struct { Bar int}f := Foo{10}next := 11prev, f.Bar := f.Bar, next停止類型推斷的結構有什么特別之處?這是一個錯誤嗎?
3 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
從規范的短變量聲明部分:
與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初在同一塊中較早地聲明......具有相同的類型,并且至少有一個非空變量是新的。
因此,如果您在另一種類型(示例中的 struct Foo)中聲明變量,則“假設它們最初是在同一塊中較早地聲明的”將取消其資格。
所以答案是只將預先聲明的變量設置為等于不使用 := 語法的值:
...
var prev int
prev, f.Bar = f.Bar, next
...
- 3 回答
- 0 關注
- 397 瀏覽
添加回答
舉報
0/150
提交
取消