使用指针或值嵌入 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

}

指针或值更喜欢什么?


MYYA
浏览 152回答 3
3回答

慕姐4208626

这取决于。这里有几种可能性。如果 Renderer 是按值传递的,并且您需要在 Bitmap 上的方法在 *Bitmap 上定义,那么您需要嵌入 *Bitmap。如果 Renderer 作为指针传递,那么您可以毫无问题地将 Bitmap 作为值嵌入(在这种情况下仍然可以访问指针方法)。如果 Bitmap 具有返回指针的构造函数,并且 Bitmap 的零值不可用,则您需要嵌入 *Bitmap,因为您不想鼓励按值复制 Bitmap 值。如果所有 Bitmap 方法都是值方法,那么您肯定要按值嵌入。在您这里的特定情况下,我可能会按值嵌入,因为类型很小 - 它为您提供访问位置和更少的内存分配。

温温酱

通过嵌入类型,您通常希望从呼叫转移中受益。*Bitmap的方法集是一个超集的Bitmap的方法集。所以在大多数情况下你会想要 embed *Bitmap,除非它的所有方法都有一个类型的接收器Bitmap或者方法将它设置为空,在这种情况下你可以避免间接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go