您好,登錄后才能下訂單哦!
這篇文章主要介紹“golang中怎么使用匿名結構體”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“golang中怎么使用匿名結構體”文章能幫助大家解決問題。
在一些項目中, 我們會使用json 來將字符串轉為結構體,但是很多時候,這種結構體只會用一次,基本上只會用于反序列化, 對于這種只用到一次的結構體, 我們可以使用匿名結構體. 在gin 接收參數的時候會非常有用, 如我們將要接收的json 參數為
{ "opt": "left", "phoneinfo": [ {"device_id": 64, "sn": "192.168.110.65:5555"}, {"device_id": 68, "sn": "192.168.110.164:5555"} ] }
當我們嘗試使用 json.Unmarshal()
函數將json 字符串轉為go中的數據結構時,我們可以有以下幾種方式
map 結構需要定義key 和value的類型, 對于key 好說, 可以都定義為string, 但是對于value, 從上面的json 結構可以看出, 有字符串,也有整型,這種就不太好定義,誰知道未來會不會有新的類型,所以我們可以無腦的將json 轉化為 map[string]interface{}
import ( "encoding/json" "fmt" ) func main() { str := `{ "opt": "left", "phoneinfo": [ {"device_id": 64, "sn": "192.168.110.65:5555"}, {"device_id": 68, "sn": "192.168.110.164:5555"} ] }` var s map[string]interface{} json.Unmarshal([]byte(str), &s) fmt.Printf("%#v", s) }
這種是可以轉換,但是如果要用到里面的數據就比較麻煩, 需要將 interface{}
做類型轉換 如要獲取到opt 參數
opt := s["opt"].(string) fmt.Println(opt)
還有一種方式是定義一個結構體,用來接收參數 如想要接收上面的json 字符串, 可以定義下面的結構體
package main import ( "encoding/json" "fmt" ) type phoneinfo struct { Device_id int `json:"device_id"` Sn string `json:"sn"` } type params struct { Opt string `json:"opt"` Phoneinfo []phoneinfo `json:"phoneinfo"` } func main() { str := `{ "opt": "left", "phoneinfo": [ {"device_id": 64, "sn": "192.168.110.65:5555"}, {"device_id": 68, "sn": "192.168.110.164:5555"} ] }` var s params json.Unmarshal([]byte(str), &s) fmt.Printf("%#v\n", s) fmt.Println(s.Opt) //left fmt.Println(s.Phoneinfo[0].Sn) //192.168.110.65:5555 }
上面定義了兩個結構體,但是很明顯,這兩個結構體只在這里使用一次, 別的地方是不會再用得到的, 所以這時我們也可以使用匿名結構體
func main() { str := `{ "opt": "left", "phoneinfo": [ {"device_id": 64, "sn": "192.168.110.65:5555"}, {"device_id": 68, "sn": "192.168.110.164:5555"} ] }` var s struct { Opt string `json:"opt"` Phoneinfo []struct { Device_id int `json:"device_id"` Sn string `json:"sn"` } `json:"phoneinfo"` } json.Unmarshal([]byte(str), &s) fmt.Printf("%#v\n", s) fmt.Println(s.Opt) fmt.Println(s.Phoneinfo[0].Sn) }
直接通過 var 變量名 struct {}
來初始化一個匿名結構體變量, 但是如果這種結構需要在多處使用,那還是單獨定義一個具名結構體比較好。
關于“golang中怎么使用匿名結構體”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。