结构体赋值中的类型推断
Go 中的类型推断是一个方便的功能,允许您在某些情况下省略显式类型注释。但是,当为结构化类型的字段赋值时,可能会出现某些限制。
考虑以下代码片段:
i := 10 next := 11 prev, i := i, next
这里,对 i 的赋值推断了 prev 的类型并声明它为 int。
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
但是,在此代码中,对 f.Bar 的赋值无法推断出上一页相反,它会产生错误:“:=”左侧的非名称。
为什么会发生这种情况?事实证明,结构类型 (Foo) 的存在扰乱了类型推断过程。在简单的赋值中(如第一个代码片段),类型推断依赖于上下文来确定所赋值变量的类型。然而,在第二个代码片段中,结构体的存在创建了一个具有多个组件的表达式,使得类型推断不明确。
这是 Go 中的错误吗?事实证明,这是一个已在问题 6842 中讨论过的已知问题:
问题 6842:规范:使用短声明符号分配给字段
问题仍未解决,表明此行为是有意为之。要解决此限制,您可以显式键入注释 prev 变量或使用更长的赋值形式,例如 f.Bar = next。
以上是为什么 Go 的类型推断在结构体字段赋值时失败?的详细内容。更多信息请关注PHP中文网其他相关文章!