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中文网其他相关文章!