为了账号安全,请及时绑定邮箱和手机立即绑定

Go 无法推断赋值中的类型:“:= 左侧的非名称”

Go 无法推断赋值中的类型:“:= 左侧的非名称”

Go
翻阅古今 2021-07-16 22:15:53
此代码段按预期工作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贡献1830条经验 获得超9个赞

这是一个开放的问题。

问题 6842:规范:使用短声明符号分配给字段


查看完整回答
反对 回复 2021-07-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

这不是真正的类型推断问题,只是左侧:=必须是标识符列表,而f.Bar不是标识符,因此不能声明——即使:=是稍微宽松的规则也不行它可以声明什么。请参阅Go 编程语言规范“短变量声明”


查看完整回答
反对 回复 2021-07-19
?
森栏

TA贡献1810条经验 获得超5个赞

从规范的短变量声明部分:


与常规变量声明不同,短变量声明可以重新声明变量,前提是它们最初在同一块中较早地声明......具有相同的类型,并且至少有一个非空变量是新的。


因此,如果您在另一种类型(示例中的 struct Foo)中声明变量,则“假设它们最初是在同一块中较早地声明的”将取消其资格。


所以答案是只将预先声明的变量设置为等于不使用 := 语法的值:


...

var prev int

prev, f.Bar = f.Bar, next

...


查看完整回答
反对 回复 2021-07-19
  • 3 回答
  • 0 关注
  • 299 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信