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ō)明
這種方式寫起來(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ò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:松原 鷹潭 河池 宜春 黔西 保定 武漢 泰安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go嵌套匿名結(jié)構(gòu)體的初始化詳解》,本文關(guān)鍵詞 嵌套,匿名,結(jié)構(gòu),體,的,初始化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。