如何在 golang 上重用结构键?

有没有办法将一个结构中的键用于另一个结构?


例如,我有以下结构:


type Player struct {

    Age       uint8      `json:"age"`

    Name      string     `json:"name"`

    UUID      string     `json:"uuid"`

}


type PlayerDynamo struct {

    // I want all the keys from Player at the same level as `Salary`.

    // Age       uint8      `json:"age"`

    // Name      string     `json:"name"`

    // UUID      string     `json:"uuid"`

    Salary float32 `json:"salary"`

}

如何声明使用与 相同的密钥?PlayerDynamoPlayer


哆啦的时光机
浏览 72回答 2
2回答

互换的青春

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"`}现在一个实例同时具有一个成员...PlayerDynamoPlayerp := PlayerDynamo{}p.Player.Name和以下各项的嵌入字段:Playerp := PlayerDynamo{}p.Name // Equivalent to p.Player.Name甚至的方法也可以在 上调用 :PlayerPlayerDynamofunc (p Player) String() string {  return fmt.Sprintf("Player %q", p.Name)}p := PlayerDynamo{  Player: Player {    Name: "Bob",  },}fmt.Println(p.String()) // Player "Bob"这与将 // 字段复制到 中并不完全相同:当您声明一个新的时,您仍然需要显式初始化嵌入式:AgeNameUUIDPlayerDynamoPlayerDynamoPlayerp := PlayerDynamo {  Player: Player {    Name: "test",    Age: 45,  }  Salary: 42}至关重要的是,结构标记被复制过来,编组到 JSON 的工作按预期工作,所有字段都显示在 .PlayerPlayerDynamo有关实际示例,请参阅 https://play.golang.org/p/6HMrlVZzIsn。

九州编程

使用嵌入:type PlayerDynamo struct {   Player   Salary float32 `json:"salary"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go