go匿名結構體
嵌套匿名結構體的 示例代碼片.
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"`
}
}
初始化方式一
上述嵌套匿名結構體初始化賦值的示例代碼片
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 直接初始化的時候是需要給出它的結構的。
初始化方式二
上述嵌套匿名結構體初始化賦值的示例代碼片
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"
說明
這種方式寫起來更清晰省事兒~
補充:golang 使用匿名結構體的問題
golang允許使用匿名結構體,形如
type Test struct {
param1 struct {
param2 string
}
}
一般在使用的時候可以直接這樣初始化
a := Test{
param1: struct{ param2 string }{param2: "test"},
}
或者
b := new(Test)
b.param1.param2 = "test"
但今天遇到一種情況
匿名結構體的成員上有tag聲明,形如
type Test struct {
param1 struct {
param2 string `json:"param2"`
}
}
這時使用第一種初始化方式,始終報錯,說類型不匹配,查了很久,偶然情況下去掉了結構體定義中的tag聲明,居然不報錯了,這時反應過來,使用第一種初始化方式,必須保證跟定義完全一樣,包括tag聲明等
a := Test{
param1: struct{ param2 string `json:"param2"` }{param2: "test"},
}
這樣就沒問題了~
最后覺得如果遇到這種匿名結構體,還是使用第二種初始化方式簡潔方便。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- 在django-xadmin中APScheduler的啟動初始化實例
- mongodb初始化并使用node.js實現mongodb操作封裝方法
- django初始化數據庫的實例
- Go語言創建、初始化數組的常見方式匯總
- go語言的初始化順序,包,變量,init詳解