此代码段按预期工作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 关注
- 299 浏览
添加回答
举报
0/150
提交
取消