不能使用简短声明来设置字段的值
struct 的变量字段不能使用 := 来赋值以使用预定义的变量来避免解决:
// 错误示例
type info struct {
result int
}
func work() (int, error) {
return 3, nil
}
func main() {
var data info
data.result, err := work() // error: non-name data.result on left side of :=
fmt.Printf(“info: %+v\n”, data)
}
// 正确示例
func main() {
var data info
var err error // err 需要预声明
data.result, err = work()
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("info: %+v\n", data) } <!-- more --> 在赋值中,goto无法推断类型:"non name on left side of :=" 这里代码Fragment按预期的play.golang.org/p/VuCl-OKMav
i := 10
next := 11
prev, i := i, next
然而这个几乎相同的Fragment non-name f.Bar on left side of :=play.golang.org/p/J8NNWPugQG
type Foo struct {
Bar int
}
f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next
什么是停止类型推理的结构的特殊?这是Bug?
它不是真正的类型推断问题,只是:=的left-hand-side必须是标识符的列表,f.Bar不是标识符,所以它不能声明为—,因为它可以声明的规则的:=slightly-more-permissive 。看到”。短变数声明”去编程语言规范中。
这是一个公开的问题。
问题6842 :规范:为具有简短声明符号的栏位赋值