为了账号安全,请及时绑定邮箱和手机立即绑定

我应该在 struct 字段上还是在 struct 上创建指针?走

我应该在 struct 字段上还是在 struct 上创建指针?走

Go
人到中年有点甜 2021-08-30 14:37:31
我想知道关于指针的最佳实践是什么。我应该在结构上还是在其字段上定义它们。不过,我觉得很有道理定义一个指针结构本身,但这里是我觉得耐人寻味的例子。如果所有的字段指针,为什么我不应该使用指针到整个结构,而不是得到一个地址为每个字段?type Tag struct {    Tag     *string       `json:"tag,omitempty"`    SHA     *string       `json:"sha,omitempty"`    URL     *string       `json:"url,omitempty"`    Message *string       `json:"message,omitempty"`    Tagger  *CommitAuthor `json:"tagger,omitempty"`    Object  *GitObject    `json:"object,omitempty"`}下面的结构内容的样品{  "tag": "v0.0.1",  "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac",  "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac",  "message": "initial version\n",  "tagger": {    "name": "Scott Chacon",    "email": "schacon@gmail.com",    "date": "2011-06-17T14:53:35-07:00"  },  "object": {    "type": "commit",    "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c",    "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c"  }}
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

更有效的有非指针域,但在这种情况下,他们有一个奇怪的原因使用指针,在讨论博客文章“走,REST API和指针”。

它看起来像你说的是结构在这里定义的,在旅途中,GitHub的库。它使各个领域的指针,以便它是微不足道的通过nil对场的任何子集(只是不指定它们)。当你构建,说方式,PATCH通过GitHub的API更新的东西调用,您可以指定是否Description仅仅是不相关的请求(你没有更新的说明),或者你是否打算集Description""。关键的一点是,""nil 有不同的含义PATCH调用他们的API。

如果您有类似的愿望来区分一个零字符串/结构/等等。从“不适用此对象”,你也可以使用指针。如果你不需要,虽然,最好不要使各个领域的指针,因为这往往会令你的内存使用模式更糟糕-小更多的内存占用,更高速缓存未命中,更多的东西的GC需要跟踪通过不加间接指针的那一层(但看起来稍微有点更详细的编写代码时)是等的一种方法sql.NullString,这仅仅是一个具有布尔和字符串结构。

在GitHub的情况下,它的任何性能影响是不是一个大问题 - GitHub的需要来响应Web请求的时间将会大大超过任何CPU绑定工作的库做反正。


查看完整回答
反对 回复 2021-08-30
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信