dsilhx5830 2017-07-28 13:16
浏览 28

自定义结构中的指针

Recently, I got exposed to following source code from "Go Programming Blueprints" book.

type googleGeometry stuct {
    *googleLocation `json:"location"`
}
type googleLocation struct {
    Lat float64 `json:"lat"`
    Lng float64 `json:"lng"`
}

What I don't understand is why googleGeometry structure uses pointer instead of literal, and what is the reason behind such declaration?

I would expect below declaration instead of a pointer.

type googleGeometry stuct {
    gl googleLocation `json:"location"`
}
  • 写回答

4条回答 默认 最新

  • dqxm14187 2017-07-28 13:23
    关注

    googleGeometry embeds a pointer to a googleLocation. It is essentially an unnamed field so that the Lat and Lng fields are accessible as if they were top level fields.

    Why use

    type googleGeometry stuct {
        *googleLocation `json:"location"`
    }
    

    instead of

    type googleGeometry stuct {
        googleLocation `json:"location"`
    }
    

    ?

    I think they made the wrong call here. The pointer is nillable so if you do:

    g := googleGeometry{}
    fmt.Println(g.Lat)
    

    you will get a nil reference panic. If you embed a non-pointer struct, the fields will be automatically initialized to zeros.

    评论

报告相同问题?

悬赏问题

  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序