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"},
}

  這樣就沒問題了

最后覺得如果遇到這種匿名結構體,還是使用第二種初始化方式簡潔方便。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM