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

我想知道关于指针的最佳实践是什么。我应该在结构上还是在其字段上定义它们。不过,我觉得很有道理定义一个指针结构本身,但这里是我觉得耐人寻味的例子。如果所有的字段指针,为什么我不应该使用指针到整个结构,而不是得到一个地址为每个字段?


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"

  }

}


人到中年有点甜
浏览 176回答 1
1回答

梵蒂冈之花

这是更有效的有非指针域,但在这种情况下,他们有一个奇怪的原因使用指针,在讨论博客文章“走,REST API和指针”。它看起来像你说的是结构在这里定义的,在旅途中,GitHub的库。它使各个领域的指针,以便它是微不足道的通过nil对场的任何子集(只是不指定它们)。当你构建,说方式,PATCH通过GitHub的API更新的东西调用,您可以指定是否Description仅仅是不相关的请求(你没有更新的说明),或者你是否打算集Description到""。关键的一点是,""并nil 有不同的含义在PATCH调用他们的API。如果您有类似的愿望来区分一个零字符串/结构/等等。从“不适用此对象”,你也可以使用指针。如果你不需要,虽然,最好不要使各个领域的指针,因为这往往会令你的内存使用模式更糟糕-小更多的内存占用,更高速缓存未命中,更多的东西的GC需要跟踪通过不加间接指针的那一层(但看起来稍微有点更详细的编写代码时)是等的一种方法sql.NullString,这仅仅是一个具有布尔和字符串结构。在GitHub的情况下,它的任何性能影响是不是一个大问题 - GitHub的需要来响应Web请求的时间将会大大超过任何CPU绑定工作的库做反正。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go