golang允許使用匿名結構體,形如 一般在使用的時候可以直接這樣初始化 或者 但今天遇到一種情況 匿名結構體的成員上有tag聲明,形如 這時使用第一種初始化方式,始終報錯,說類型不匹配,查了很久,偶然情況下去掉了結構體定義中的tag聲明,居然不報錯了,這時反應過來,使用第一種初始化方式,必須保證跟 ...
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"}, }
這樣就沒問題了
最後覺得如果遇到這種匿名結構體,還是使用第二種初始化方式簡潔方便。