使用速记赋值/声明将返回值赋给struct成员

时间:2014-05-27 18:01:51

标签: go

:=成员分配其中一个返回值时,为什么我不能使用struct

playground

package main

import "fmt"

type Foo struct { Bar int64 }

func Baz() (int64, int64) { return 0, 0 }

func main() {
  foo := Foo{}

  var x int64
  x, foo.Bar = Baz() // ok

  y, foo.Bar := Baz() // error

  fmt.Printf("%#v\n", foo)
}

编译错误是:

non-name foo.Bar on left side of :=

1 个答案:

答案 0 :(得分:4)

因为规范是这样说的。不,真的:

因此,在使用短变量声明语法时,不允许指定选择器。

有关详细信息,请参阅this related issue。在那里你可以找到这种行为背后的原因:

  

:=表示法是常见案例的简写。它并不意味着涵盖人们可能写的每一个可能的声明。我宁愿按原样离开,但在其他人称重之前不会关闭它。