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", }, }
說明
匿名 struct 直接初始化的時候是需要給出它的結(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"
說明
這種方式寫起來更清晰省事兒~
補(bǔ)充:golang 使用匿名結(jié)構(gòu)體的問題
golang允許使用匿名結(jié)構(gòu)體,形如
type Test struct { param1 struct { param2 string } }
一般在使用的時候可以直接這樣初始化
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"` } }
這時使用第一種初始化方式,始終報錯,說類型不匹配,查了很久,偶然情況下去掉了結(jié)構(gòu)體定義中的tag聲明,居然不報錯了,這時反應(yīng)過來,使用第一種初始化方式,必須保證跟定義完全一樣,包括tag聲明等
a := Test{ param1: struct{ param2 string `json:"param2"` }{param2: "test"}, }
這樣就沒問題了~
最后覺得如果遇到這種匿名結(jié)構(gòu)體,還是使用第二種初始化方式簡潔方便。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)
在Go語言中,并發(fā)編程是一個核心且強(qiáng)大的特性,Go語言通過goroutine和channel等機(jī)制,使得并發(fā)編程變得更加簡單和直觀,本文給大家介紹了Go語言中如何通過Goroutine快速實現(xiàn)高并發(fā),感興趣的小伙伴跟著小編一起來看看吧2024-10-10詳解Go語言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用
這篇文章將以 string 類型為中心,通過 strconv 標(biāo)準(zhǔn)庫,介紹其與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換的函數(shù)。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-12-12Go中使用gjson來操作JSON數(shù)據(jù)的實現(xiàn)
本文主要介紹了Go中使用gjson來操作JSON數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08golang利用函數(shù)閉包實現(xiàn)簡單的中間件
中間件設(shè)計模式是一種常見的軟件設(shè)計模式,它在許多編程語言和框架中被廣泛應(yīng)用,這篇文章主要為大家介紹一下golang利用函數(shù)閉包實現(xiàn)一個簡單的中間件,感興趣的可以了解下2023-10-10