猿问

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

假设我有结构


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.2

mars.Perihelion = 206.7

mars.Axis = 227939100

mars.Radius = 3389.5


var earth = new(Planet)

earth.Name = "Earth"

earth.Aphelion = 151.930

earth.Perihelion = 147.095

earth.Axis = 149598261

earth.Radius = 6371.0


var venus = new(Planet)

venus.Name = "Venus"

venus.Aphelion = 108.939

venus.Perihelion = 107.477

venus.Axis = 108208000

venus.Radius = 6051.8

现在我想添加一个字段,例如Mass所有这些。我怎样才能做到这一点?


目前,我定义了一个新结构,例如PlanetWithMass,将所有字段(逐个字段)重新分配给PlanetWithMass.


有没有更简洁的方法来做到这一点?一种Planet变化时不需要调整的方式?


编辑:我需要在 Web 服务器上使用它,我必须在其中将结构作为 JSON 发送,但还有一个附加字段。嵌入不能解决这个问题,因为它改变了生成的 JSON。


慕尼黑5688855
浏览 222回答 2
2回答

慕村225694

你可以嵌入Planet到PlanetWithMass:type PlanetWithMass struct {    Planet    Mass float64}并做类似的事情marsWithMass := PlanetWithMass{    Planet: mars,    Mass: 639e21,}

胡说叔叔

您可能可以使用map[string]string,这将使您能够显式添加尽可能多的子键。注意:您必须首先使用一种类型声明结构type PlanetWithMass struct { Planet map[string]string }然后添加更多字段,从结构的一个实例开始type PlanetWithMass struct {  Planet map[string]string}planet := &PlanetWithMass{} // instance of structplanet.Planet = make(map[string]string) // declare field as a map[string]stringplanet.Planet["Name"] = "Mercury"planet.Planet["Galaxy"] = "Milky Way"planet.Planet["Population"] = "7 Billion"planet.Planet["HasOceans"] = "Yes"使用这种方法,您可以将多个字段添加到结构中,而无需担心使用接口。这可能是一个全面的黑客,但它的工作原理!
随时随地看视频慕课网APP

相关分类

Go
我要回答