struct {a int; b int}和struct {b int; a int}之间有什么区别?

Dog*_*Dog 5 types go

这两种结构之间有什么区别,除了它们不被认为是等价的?

package main
func main() {}
func f1(s struct{a int;b int}) { f2(s) }
func f2(s struct{b int;a int}) {}
Run Code Online (Sandbox Code Playgroud)

$ go run a.go 
# command-line-arguments
./a.go:3: cannot use s (type struct { a int; b int }) as type struct { b int; a int } in argument to f2
Run Code Online (Sandbox Code Playgroud)

注意:这确实编译:

package main
func main() {}
func f1(s struct{a int;b int}) { f2(s) }
func f2(s struct{a int;b int}) {}
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 5

"结构'字段的顺序在低级别上很重要"如何?

这将影响反射,如func (v Value) Field(i int) Value:

Field返回struct v的第i个字段

第一结构中的第一个字段'a'在第二个结构中的第一个字段'a'不同.
这也将影响使用编组方法(编码包)的序列化.