欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

轉(zhuǎn)化為map

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

還有一種方式是定義一個結(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)體

上面定義了兩個結(jié)構(gòu)體,但是很明顯,這兩個結(jié)構(gòu)體只在這里使用一次, 別的地方是不會再用得到的, 所以這時我們也可以使用匿名結(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 {} 來初始化一個匿名結(jié)構(gòu)體變量, 但是如果這種結(jié)構(gòu)需要在多處使用,那還是單獨定義一個具名結(jié)構(gòu)體比較好.

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

相關(guān)文章

  • 適合PHP同學的GoFrame框架使用體驗及學習建議

    適合PHP同學的GoFrame框架使用體驗及學習建議

    這篇文章主要為大家介紹了非常適合PHP同學使用的GoFrame框架設(shè)計思想使用體驗及學習建議介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang并發(fā)編程的實現(xiàn)

    golang并發(fā)編程的實現(xiàn)

    這篇文章主要介紹了golang并發(fā)編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Golang中閉包與常用場景詳解

    Golang中閉包與常用場景詳解

    在很多的開源項目里,經(jīng)??吹介]包的運用,這篇文章主要為大家簡要記錄一下閉包的概念和一些常用的場景,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • Go語言中 Channel 詳解

    Go語言中 Channel 詳解

    Go 語言中的 channel 是實現(xiàn) goroutine 間無鎖通信的關(guān)鍵機制,他使得寫多線程并發(fā)程序變得簡單、靈活、觸手可得。下面就個人理解對 channel 使用過程中應(yīng)該注意的地方進行一個簡要的總結(jié)。
    2018-10-10
  • go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析

    go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析

    這篇文章主要為大家介紹了go內(nèi)存隊列l(wèi)ist VS slice實現(xiàn)方式對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 淺談Golang是如何讀取文件內(nèi)容的(7種)

    淺談Golang是如何讀取文件內(nèi)容的(7種)

    這篇文章主要介紹了淺談Golang是如何讀取文件內(nèi)容的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點

    深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點

    Go是一種開源的編程語言,由Google開發(fā),它具有簡潔、高效、并發(fā)性強的特點,適用于構(gòu)建可靠的、高性能的軟件系統(tǒng),本文將介紹Go的基礎(chǔ)知識,需要的朋友可以參考下
    2023-10-10
  • 詳解如何通過Go來操作Redis實現(xiàn)簡單的讀寫操作

    詳解如何通過Go來操作Redis實現(xiàn)簡單的讀寫操作

    作為最常用的分布式緩存中間件——Redis,了解運作原理和如何使用是十分有必要的,今天來學習如何通過Go來操作Redis實現(xiàn)基本的讀寫操作,需要的朋友可以參考下
    2023-09-09
  • Go語言讀取文件的方法小結(jié)

    Go語言讀取文件的方法小結(jié)

    寫程序時經(jīng)常需要從一個文件讀取數(shù)據(jù),然后輸出到另一個文件,這篇文章主要為大家詳細介紹了Go語言讀取文件的幾種方法,希望對大家有所幫助
    2024-01-01
  • Golang 如何解析和生成json

    Golang 如何解析和生成json

    這篇文章主要介紹了Golang 如何解析和生成json,幫助大家更好的理解和學習golang,感興趣的朋友可以了解下
    2020-09-09

最新評論