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

我可以使用 Go 向现有结构添加字段吗?

我可以使用 Go 向现有结构添加字段吗?

Go
慕尼黑5688855 2021-09-21 16:16:56
假设我有结构type Planet struct {    Name       string  `json:"name"`    Aphelion   float64 `json:"aphelion"`   // in million km    Perihelion float64 `json:"perihelion"` // in million km    Axis       int64   `json:"Axis"`       // in km    Radius     float64 `json:"radius"`}以及这个结构的实例,例如var mars = new(Planet)mars.Name = "Mars"mars.Aphelion = 249.2mars.Perihelion = 206.7mars.Axis = 227939100mars.Radius = 3389.5var earth = new(Planet)earth.Name = "Earth"earth.Aphelion = 151.930earth.Perihelion = 147.095earth.Axis = 149598261earth.Radius = 6371.0var venus = new(Planet)venus.Name = "Venus"venus.Aphelion = 108.939venus.Perihelion = 107.477venus.Axis = 108208000venus.Radius = 6051.8现在我想添加一个字段,例如Mass所有这些。我怎样才能做到这一点?目前,我定义了一个新结构,例如PlanetWithMass,将所有字段(逐个字段)重新分配给PlanetWithMass.有没有更简洁的方法来做到这一点?一种Planet变化时不需要调整的方式?编辑:我需要在 Web 服务器上使用它,我必须在其中将结构作为 JSON 发送,但还有一个附加字段。嵌入不能解决这个问题,因为它改变了生成的 JSON。
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

你可以嵌入Planet到PlanetWithMass:


type PlanetWithMass struct {

    Planet

    Mass float64

}

并做类似的事情


marsWithMass := PlanetWithMass{

    Planet: mars,

    Mass: 639e21,

}

查看完整回答
反对 回复 2021-09-21
?
胡说叔叔

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

您可能可以使用map[string]string,这将使您能够显式添加尽可能多的子键。注意:您必须首先使用一种类型声明结构


type PlanetWithMass struct { Planet map[string]string }


然后添加更多字段,从结构的一个实例开始


type PlanetWithMass struct {

  Planet map[string]string

}


planet := &PlanetWithMass{} // instance of struct


planet.Planet = make(map[string]string) // declare field as a map[string]string


planet.Planet["Name"] = "Mercury"

planet.Planet["Galaxy"] = "Milky Way"

planet.Planet["Population"] = "7 Billion"

planet.Planet["HasOceans"] = "Yes"

使用这种方法,您可以将多个字段添加到结构中,而无需担心使用接口。这可能是一个全面的黑客,但它的工作原理!


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

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