2 回答
TA贡献1797条经验 获得超6个赞
Go支持一种称为“结构嵌入”或只是“嵌入”的独特功能,这是一种一流的组合(与大多数OOP语言提供的一流继承相比)。
嵌入允许您将一个结构嵌入到另一个结构中,以便可以引用嵌入结构的成员,就好像它们是在父结构上声明的一样:
type Player struct {
Age uint8 `json:"age"`
Name string `json:"name"`
UUID string `json:"uuid"`
}
type PlayerDynamo struct {
Player // PlayerDynamo "embeds" Player
Salary float32 `json:"salary"`
}
现在一个实例同时具有一个成员...PlayerDynamoPlayer
p := PlayerDynamo{}
p.Player.Name
和以下各项的嵌入字段:Player
p := PlayerDynamo{}
p.Name // Equivalent to p.Player.Name
甚至的方法也可以在 上调用 :PlayerPlayerDynamo
func (p Player) String() string {
return fmt.Sprintf("Player %q", p.Name)
}
p := PlayerDynamo{
Player: Player {
Name: "Bob",
},
}
fmt.Println(p.String()) // Player "Bob"
这与将 // 字段复制到 中并不完全相同:当您声明一个新的时,您仍然需要显式初始化嵌入式:AgeNameUUIDPlayerDynamoPlayerDynamoPlayer
p := PlayerDynamo {
Player: Player {
Name: "test",
Age: 45,
}
Salary: 42
}
至关重要的是,结构标记被复制过来,编组到 JSON 的工作按预期工作,所有字段都显示在 .PlayerPlayerDynamo
有关实际示例,请参阅 https://play.golang.org/p/6HMrlVZzIsn。
- 2 回答
- 0 关注
- 71 浏览
添加回答
举报