pointers - 定义结构时何时使用指针

标签 pointers go

我已经在某些库中注意到,当它们定义结构时,某些值具有指针,而另一些则没有。我似乎找不到任何地方解释何时使用指针以及何时不使用指针。
例子

type MyStruct struct {
     FieldOne     *int64 
     FieldTwo     int64
     FieldFour    *AnotherStruct
     FieldFive    AnotherStruct
}
使用指针有什么好处?

最佳答案

根据我的经验,如果我们忘记在使用nil之前先检查nil,那么我将尝试在结构中不使用指针值,因为它可能是导致 panic 的根本原因。在结构中使用指针值时,有三个原因:

  • 该字段是一个很大的结构,因此我认为它可以帮助减少复制成本(在C/C++中是正确的,但在某些情况下,基准测试显示了相同的结果)。
  • 当我需要检查该值是否为nil并做一些事情时(由于go中的默认值以及与AnotherStruct {}进行比较的成本)。
  • 当我需要“omitempty”(如果为空,则忽略此字段)将struct的字段转换为bson或json ...
    我希望2)和3)可以帮助您回答问题。如果您有更好的主意,请与我分享。因为我还新去!
  • 关于pointers - 定义结构时何时使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62771315/

    相关文章:

    go - 检查结构字段是否为空

    c - 在 C 中,如何从函数内部初始化指向指针的指针?

    C - 指向 int 的指针以获取堆栈中的元素

    c - 关于指针指向指针的问题

    syntax - 关键字 var 后的下划线和接口(interface)名称是什么意思?

    pointers - 循环中覆盖的封闭变量

    c - 分配后它不会是相同的内存地址吗?

    C++指针地址解释

    go - 为什么这段代码在 Go 中是 O(n²) 而不是 O(n)?

    memory - Go Windows 将 Flag 传递给内存映射系统调用