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

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


package main

func main() {}

func f1(s struct{a int;b int}) { f2(s) }

func f2(s struct{b int;a int}) {}

$ 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

注意:这确实编译:


package main

func main() {}

func f1(s struct{a int;b int}) { f2(s) }

func f2(s struct{a int;b int}) {}


MMMHUHU
浏览 297回答 3
3回答

ITMISS

“结构字段的顺序在低级别很重要”如何?这将影响反射,例如func (v Value) Field(i int) Value:Field 返回结构体 v 的第 i 个字段第一个结构中的第一个字段 'a' 与第二个结构中的第一个字段不同。这也将影响使用封送拆收器方法(编码包)的序列化。

慕侠2389804

类型和值的属性类型标识如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称、相同的类型和相同的标签,则它们是相同的。对应的字段名称不同:s struct{a int;b int}相对s struct{b int;a int}

临摹微笑

从规范:如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称、相同的类型和相同的标签,则它们是相同的。两个匿名字段被认为具有相同的名称。来自不同包的小写字段名称总是不同的。结构体字段的顺序在底层很重要,因此不能安全地将具有不同字段序列的两个结构体视为等价的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go