例子1

  1. type firmWareResp struct {
  2. Result struct {
  3. Code int `json:"code"`
  4. Message string `json:"message"`
  5. } `json:"result"`
  6. Data FirmWareResp `json:"data"`
  7. }
  8. type FirmWareResp struct {
  9. Total int `json:"total"`
  10. List []firmWareList `json:"list"`
  11. }
  12. resp := &firmWareResp{}
  13. err := json.Unmarshal([]byte(result), resp)

在上面的例子中,我们在struct中直接定义一个新的结构体,并使用了嵌套组合的用法,利用json unmarshal直接赋值。这种方式是十分简便的,不需要初始化结构体。那假如说我们的匿名结构体(Result)需要初始化呢?

例子2

  1. type Account struct {
  2. Id uint32
  3. Name string
  4. Nested struct {
  5. Age uint8
  6. }
  7. }
  8. account := &Account{
  9. Id: 10,
  10. Name: "jim",
  11. Nested: struct{Age uint8}{Age, 20},
  12. }
  13. //匿名struct直接初始化的时候需要给出结构体
  14. //更清晰的使用方法是:
  15. //acc := new(Account)
  16. // acc.Id = 10
  17. // acc.Name = "jim"
  18. // acc.Nested.Age = 20

例子3

  1. type Handler{}
  2. seqNum uint16
  3. mx sync.RWMutex
  4. lastActive time.Time
  5. }
  6. // 这里使用了组合,我们在使用Handler结构体的时候,可以直接使用sync.RWMutex这个读写锁,不需要初始化
  7. h := Handler{}
  8. h.mx.Lock()
  9. h.lastActive = time.Now()
  10. h.mx.Unlock()

例子4

  1. type ModelListPara struct {
  2. Key string `json:"key" form:"key"`
  3. QueryPagePara
  4. }
  5. type QueryPagePara struct {
  6. Page int `form:"page" json:"page" binding:""`
  7. PageSize int `form:"pageSize" json:"pageSize" binding:""`
  8. }
  9. var params request.PresignPara
  10. err := c.ShouldBind(&params)
  11. //这是组合的另外一种用法,我们可以直接定义新的变量,非常简便

例子5

  1. // 我们应该怎么去初始化一个结构体数组呢?我一直都在思考这个问题
  2. type AuthRequest struct {
  3. Plain string
  4. Same string
  5. }
  6. requests := []AuthRequest{
  7. AuthRequest {
  8. "test",
  9. "test",
  10. },
  11. }
  12. fmt.Println(requests[0].Plain) //成功打印出test

参考:golang初始化结构体数组

例子6

  1. // 有时候在处理http request的时候,经常会处理一个data的字段,这个字段数据类型回事interface{}, 这样就可以得到不同的data. 这时候我们应该怎么去写呢?不好意思,实现不了...
  2. type TerraResp struct {
  3. Result struct {
  4. Code int `json:"code"`
  5. Message string `json:"msg"`
  6. Desc string `json:"desc"`
  7. } `json:"result"`
  8. }
  9. type TokenResp struct {
  10. Data ObtainTokenRsp `json:"data"`
  11. TerraResp
  12. }
  13. type ObtainTokenRsp struct {
  14. CloudName string `json:"cloudName"`
  15. AccessKeyID string `json:"accessKeyID"`
  16. SecretAccessKey string `json:"secretAccessKey"`
  17. SessionToken string `json:"sessionToken"`
  18. Region string `json:"region"`
  19. CloudBucketName string `json:"cloudBucketName"`
  20. CallbackParam string `json:"callbackParam"`
  21. StorePath string `json:"storePath"`
  22. ExpireTime int64 `json:"expireTime"`
  23. }
  24. //这种代码的构造方式,已经算是比较优雅的了