Pointers 定义结构时何时使用指针

Pointers 定义结构时何时使用指针,pointers,go,Pointers,Go,我注意到在一些库中,当它们定义结构时,一些值有指针,而另一些没有指针。我似乎找不到任何地方解释什么时候使用指针,什么时候不使用指针 范例 type MyStruct struct { FieldOne *int64 FieldTwo int64 FieldFour *AnotherStruct FieldFive AnotherStruct } 使用指针的好处是什么?根据我的经验,我会尽量不在结构中使用指针值,因为如果在使用

我注意到在一些库中,当它们定义结构时,一些值有指针,而另一些没有指针。我似乎找不到任何地方解释什么时候使用指针,什么时候不使用指针

范例

type MyStruct struct {
     FieldOne     *int64 
     FieldTwo     int64
     FieldFour    *AnotherStruct
     FieldFive    AnotherStruct
}

使用指针的好处是什么?

根据我的经验,我会尽量不在结构中使用指针值,因为如果在使用指针之前忘记检查nil,它可能是导致恐慌的根本原因。在结构中使用指针值有三个原因:

  • 这个字段是一个大的结构,所以我认为它可以帮助减少复制成本(在C/C++中是正确的,但在go中,某些情况下基准测试显示了相同的结果)
  • 当我需要检查并做一些事情时,如果这个值为nil(因为go中的默认值以及与另一个struct{}比较的成本)
  • 当我需要“ommitempty”(如果该字段为空则忽略该字段)将struct的字段转换为bson或json时。。。 我希望2)和3)能帮助回答你的问题。如果你有更好的想法,请与我分享。因为我也是新来的
    当您想要区分“零”值和非值(即
    nil
    )时,指针非常有用。让我来分享这篇文章。我认为它提供了一些很好的信息,告诉你什么时候可以使用指针。如果您想听到更多的意见,那么关于这个主题的文章还有很多,但我认为这篇文章涵盖了最常见的要点。为了防止在执行共享状态更改时出现内存重复。@mh bon这就是使用指向外部结构的指针的原因,不是使用指针字段的理由。#1仅在字段是大型结构或数组类型时才有意义。否则,指针可能已经是8个字节,并且不会比复制值快多少。