为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMMHUHU 2021-08-10 20:40:20
除了它们不被认为是等效的之外,这两个结构之间有什么区别?package mainfunc 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 mainfunc main() {}func f1(s struct{a int;b int}) { f2(s) }func f2(s struct{a int;b int}) {}
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

“结构字段的顺序在低级别很重要”如何?

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

Field 返回结构体 v 的第 i 个字段

第一个结构中的第一个字段 'a' 与第二个结构中的第一个字段不同。
这也将影响使用封送拆收器方法(编码包)的序列化


查看完整回答
反对 回复 2021-08-10
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

类型和值的属性

类型标识

如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称、相同的类型和相同的标签,则它们是相同的。

对应的字段名称不同:

s struct{a int;b int}

相对

s struct{b int;a int}


查看完整回答
反对 回复 2021-08-10
?
临摹微笑

TA贡献1982条经验 获得超2个赞

规范

如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称、相同的类型和相同的标签,则它们是相同的。两个匿名字段被认为具有相同的名称。来自不同包的小写字段名称总是不同的。

结构体字段的顺序在底层很重要,因此不能安全地将具有不同字段序列的两个结构体视为等价的。


查看完整回答
反对 回复 2021-08-10
  • 3 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信