go嵌套匿名結(jié)構(gòu)體的初始化詳解
go匿名結(jié)構(gòu)體
嵌套匿名結(jié)構(gòu)體的 示例代碼片.
type debugConfig struct {
MaxQueueDepth int `json:"maxQueueDepth"`
ListenerEntries string `json:"listenerEntries"`
Listeners string
Logging struct {
Info string `json:"info"`
Protocol string `json:"protocol"`
Errlog string `json:"error"`
Debug string `json:"debug"`
}
}
初始化方式一
上述嵌套匿名結(jié)構(gòu)體初始化賦值的示例代碼片
user1 := &debugConfig {
MaxQueueDepth: 100,
ListenerEntries: "hello",
Listeners: "world",
Logging: struct {
Info string `json:"info"`
Protocol string `json:"protocol"`
Errlog string `json:"error"`
Debug string `json:"debug"`
}{
Info:"good",
Protocol: "story",
Errlog: "shenqi",
Debug: "shuma",
},
}
說(shuō)明
匿名 struct 直接初始化的時(shí)候是需要給出它的結(jié)構(gòu)的。
初始化方式二
上述嵌套匿名結(jié)構(gòu)體初始化賦值的示例代碼片
var user2 debugConfig user2.MaxQueueDepth = 100 user2.ListenerEntries = "hello" user2.Listeners = "world" user2.Logging.Info = "good" user2.Logging.Protocol = "story" user2.Logging.Errlog = "shenqi" user2.Logging.Debug = "shuma"
說(shuō)明
這種方式寫(xiě)起來(lái)更清晰省事兒~
補(bǔ)充:golang 使用匿名結(jié)構(gòu)體的問(wèn)題
golang允許使用匿名結(jié)構(gòu)體,形如
type Test struct {
param1 struct {
param2 string
}
}
一般在使用的時(shí)候可以直接這樣初始化
a := Test{
param1: struct{ param2 string }{param2: "test"},
}
或者
b := new(Test)
b.param1.param2 = "test"
但今天遇到一種情況
匿名結(jié)構(gòu)體的成員上有tag聲明,形如
type Test struct {
param1 struct {
param2 string `json:"param2"`
}
}
這時(shí)使用第一種初始化方式,始終報(bào)錯(cuò),說(shuō)類型不匹配,查了很久,偶然情況下去掉了結(jié)構(gòu)體定義中的tag聲明,居然不報(bào)錯(cuò)了,這時(shí)反應(yīng)過(guò)來(lái),使用第一種初始化方式,必須保證跟定義完全一樣,包括tag聲明等
a := Test{
param1: struct{ param2 string `json:"param2"` }{param2: "test"},
}
這樣就沒(méi)問(wèn)題了~
最后覺(jué)得如果遇到這種匿名結(jié)構(gòu)體,還是使用第二種初始化方式簡(jiǎn)潔方便。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
詳解Go語(yǔ)言中如何通過(guò)Goroutine實(shí)現(xiàn)高并發(fā)
在Go語(yǔ)言中,并發(fā)編程是一個(gè)核心且強(qiáng)大的特性,Go語(yǔ)言通過(guò)goroutine和channel等機(jī)制,使得并發(fā)編程變得更加簡(jiǎn)單和直觀,本文給大家介紹了Go語(yǔ)言中如何通過(guò)Goroutine快速實(shí)現(xiàn)高并發(fā),感興趣的小伙伴跟著小編一起來(lái)看看吧2024-10-10
基于原生Go語(yǔ)言開(kāi)發(fā)一個(gè)博客系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于原生Go語(yǔ)言開(kāi)發(fā)一個(gè)簡(jiǎn)單的博客系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
詳解Go語(yǔ)言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用
這篇文章將以 string 類型為中心,通過(guò) strconv 標(biāo)準(zhǔn)庫(kù),介紹其與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換的函數(shù)。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-12-12
Go中使用gjson來(lái)操作JSON數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了Go中使用gjson來(lái)操作JSON數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
golang利用函數(shù)閉包實(shí)現(xiàn)簡(jiǎn)單的中間件
中間件設(shè)計(jì)模式是一種常見(jiàn)的軟件設(shè)計(jì)模式,它在許多編程語(yǔ)言和框架中被廣泛應(yīng)用,這篇文章主要為大家介紹一下golang利用函數(shù)閉包實(shí)現(xiàn)一個(gè)簡(jiǎn)單的中間件,感興趣的可以了解下2023-10-10
Golang?Mutex錯(cuò)過(guò)會(huì)后悔的重要知識(shí)點(diǎn)分享
互斥鎖?Mutex?是并發(fā)控制的一個(gè)基本手段,是為了避免并發(fā)競(jìng)爭(zhēng)建立的并發(fā)控制機(jī)制,本文主要為大家整理了一些Mutex的相關(guān)知識(shí)點(diǎn),希望對(duì)大家有所幫助2023-07-07

