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 關注
- 106 瀏覽
添加回答
舉報
