Go 赋值中的类型推断失败
Go 的类型推断机制通常允许简洁的赋值语句。但是,某些赋值可能无法按预期推断类型。
请考虑以下示例:
i := 10 next := 11 prev, i := i, next
此代码段正确推断变量的类型并相应地分配它们。
但是,涉及结构体字段的类似赋值可能会遇到类型推断问题:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
在这种情况下,编译器会报告错误:“non-name on left side of :=.”
造成这种差异的原因是在第一个示例中,赋值的左侧是变量名,而在第二个示例中,它是结构体字段。 Go 的类型推断引擎需要左侧的命名变量来推断右侧的类型。
此问题被确认为 Go 问题 6842。它不被视为错误,而是一个限制当前类型推断实现的一部分。
以上是为什么 Go 的类型推断对于结构体字段赋值失败?的详细内容。更多信息请关注PHP中文网其他相关文章!