一尘不染

使用指针或值嵌入Go中

go

我可以使用指针和值嵌入golang中。通过指针

type Bitmap struct{
    data [4][4]bool
}

type Renderer struct{
    *Bitmap
    on uint8
    off uint8
}

按价值

type Bitmap struct{
    data [4][4]bool
}

type Renderer struct{
    Bitmap 
    on uint8
    off uint8
}

通过指针或值更喜欢什么?


阅读 223

收藏
2020-07-02

共1个答案

一尘不染

这取决于。这里有几种可能性。

  • 如果Renderer按值传递,并且在 Bitmap上定义了Bitmap所需的方法,则需要嵌入 Bitmap。
  • 如果将Renderer作为指针传递,则可以将Bitmap作为值嵌入而没有任何问题(在这种情况下仍可以访问指针方法)。
  • 如果Bitmap具有返回指针的构造函数,并且Bitmap的零值不可用,则您将要嵌入* Bitmap,因为您不希望鼓励按位复制Bitmap值。
  • 如果所有位图方法都是值方法,那么您肯定要按值嵌入。

在您遇到的特定情况下,由于类型较小,我可能会按值嵌入-它使您可以访问并减少内存分配。

2020-07-02