最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang中使用匿名結(jié)構(gòu)體的方法

 更新時(shí)間:2022年08月23日 08:42:52   作者:楊彥星  
這篇文章主要介紹了golang中使用匿名結(jié)構(gòu)體,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在一些項(xiàng)目中, 我們會(huì)使用json 來將字符串轉(zhuǎn)為結(jié)構(gòu)體,但是很多時(shí)候,這種結(jié)構(gòu)體只會(huì)用一次,基本上只會(huì)用于反序列化, 對(duì)于這種只用到一次的結(jié)構(gòu)體, 我們可以使用匿名結(jié)構(gòu)體. 在gin 接收參數(shù)的時(shí)候會(huì)非常有用, 如我們將要接收的json 參數(shù)為

{
  "opt": "left", 
  "phoneinfo": [
    {"device_id": 64, "sn": "192.168.110.65:5555"},
    {"device_id": 68, "sn": "192.168.110.164:5555"}
  ]
}

當(dāng)我們嘗試使用 json.Unmarshal() 函數(shù)將json 字符串轉(zhuǎn)為go中的數(shù)據(jù)結(jié)構(gòu)時(shí),我們可以有以下幾種方式

轉(zhuǎn)化為map

map 結(jié)構(gòu)需要定義key 和value的類型, 對(duì)于key 好說, 可以都定義為string, 但是對(duì)于value, 從上面的json 結(jié)構(gòu)可以看出, 有字符串,也有整型,這種就不太好定義,誰知道未來會(huì)不會(huì)有新的類型,所以我們可以無腦的將json 轉(zhuǎn)化為 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)
}

這種是可以轉(zhuǎn)換,但是如果要用到里面的數(shù)據(jù)就比較麻煩, 需要將 interface{} 做類型轉(zhuǎn)換 如要獲取到opt 參數(shù)

opt := s["opt"].(string)
fmt.Println(opt)

定義具名結(jié)構(gòu)體

還有一種方式是定義一個(gè)結(jié)構(gòu)體,用來接收參數(shù) 如想要接收上面的json 字符串, 可以定義下面的結(jié)構(gòu)體

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
}

定義匿名結(jié)構(gòu)體

上面定義了兩個(gè)結(jié)構(gòu)體,但是很明顯,這兩個(gè)結(jié)構(gòu)體只在這里使用一次, 別的地方是不會(huì)再用得到的, 所以這時(shí)我們也可以使用匿名結(jié)構(gòu)體

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 {} 來初始化一個(gè)匿名結(jié)構(gòu)體變量, 但是如果這種結(jié)構(gòu)需要在多處使用,那還是單獨(dú)定義一個(gè)具名結(jié)構(gòu)體比較好.

到此這篇關(guān)于golang中使用匿名結(jié)構(gòu)體的文章就介紹到這了,更多相關(guān)golang匿名結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 這些關(guān)于Go中interface{}的注意事項(xiàng)你都了解嗎

    這些關(guān)于Go中interface{}的注意事項(xiàng)你都了解嗎

    這篇文章主要為大家詳細(xì)介紹了學(xué)習(xí)Go語言時(shí)需要了解的interface{}注意事項(xiàng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • Apache?IoTDB開發(fā)系統(tǒng)之Go原生接口方法

    Apache?IoTDB開發(fā)系統(tǒng)之Go原生接口方法

    這篇文章主要為大家介紹了?Apache?IoTDB開發(fā)系統(tǒng)之Go原生接口方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • go語言睡眠排序算法實(shí)例分析

    go語言睡眠排序算法實(shí)例分析

    這篇文章主要介紹了go語言睡眠排序算法,實(shí)例分析了睡眠排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • go web 預(yù)防跨站腳本的實(shí)現(xiàn)方式

    go web 預(yù)防跨站腳本的實(shí)現(xiàn)方式

    這篇文章主要介紹了go web 預(yù)防跨站腳本的實(shí)現(xiàn)方式,文中給大家介紹XSS最佳的防護(hù)應(yīng)該注意哪些問題,本文通過實(shí)例代碼講解的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • Golang?中反射的應(yīng)用實(shí)例詳解

    Golang?中反射的應(yīng)用實(shí)例詳解

    這篇文章主要為大家介紹了Golang?中反射的應(yīng)用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言map字典用法實(shí)例分析

    Go語言map字典用法實(shí)例分析

    這篇文章主要介紹了Go語言map字典用法,實(shí)例分析了map字典的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 用go實(shí)現(xiàn)反向代理的代碼示例

    用go實(shí)現(xiàn)反向代理的代碼示例

    當(dāng)實(shí)現(xiàn)反向代理時(shí),Go語言是一個(gè)強(qiáng)大而受歡迎的選擇,Go具有出色的并發(fā)性和網(wǎng)絡(luò)編程支持,使其成為構(gòu)建高性能反向代理的理想工具,在本文中,我將介紹如何使用Go語言實(shí)現(xiàn)一個(gè)簡單的反向代理服務(wù)器,并提供相應(yīng)的源代碼,需要的朋友可以參考下
    2023-06-06
  • 解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問題

    解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問題

    這篇文章主要介紹了解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang json數(shù)組拼接的實(shí)例

    golang json數(shù)組拼接的實(shí)例

    這篇文章主要介紹了golang json數(shù)組拼接的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang利用Template模板動(dòng)態(tài)生成文本

    Golang利用Template模板動(dòng)態(tài)生成文本

    Go語言中的Go?Template是一種用于生成文本輸出的簡單而強(qiáng)大的模板引擎,它提供了一種靈活的方式來生成各種格式的文本,下面我們就來看看具體如何使用Template實(shí)現(xiàn)動(dòng)態(tài)文本生成吧
    2023-09-09

最新評(píng)論

衡山县| 伊通| 东山县| 额尔古纳市| 扎囊县| 甘谷县| 宜兰市| 吉林省| 大庆市| 休宁县| 上犹县| 河池市| 玛纳斯县| 庄河市| 稷山县| 泽州县| 西丰县| 广宁县| 凤台县| 温泉县| 台江县| 临高县| 阿图什市| 简阳市| 延津县| 饶河县| 西乌珠穆沁旗| 陆良县| 泗洪县| 天全县| 简阳市| 昌黎县| 茶陵县| 黄平县| 迁西县| 洮南市| 萨迦县| 舟山市| 台南市| 封丘县| 肇庆市|