为:=
成员分配其中一个返回值时,为什么我不能使用struct
?
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 :=
答案 0 :(得分:4)
因为规范是这样说的。不,真的:
短变量声明仅定义为on identifier lists:
ShortVarDecl = IdentifierList ":=" ExpressionList .
Identifiers lists不包括Selectors:
IdentifierList = identifier { "," identifier } .
因此,在使用短变量声明语法时,不允许指定选择器。
有关详细信息,请参阅this related issue。在那里你可以找到这种行为背后的原因:
:=表示法是常见案例的简写。它并不意味着涵盖人们可能写的每一个可能的声明。我宁愿按原样离开,但在其他人称重之前不会关闭它。