亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以使用 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 關注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號