为了账号安全,请及时绑定邮箱和手机立即绑定

使用指针或值嵌入 Go

使用指针或值嵌入 Go

Go
MYYA 2021-09-13 16:36:18
我可以将指针和值嵌入到 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}指针或值更喜欢什么?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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

  • 如果 Renderer 是按值传递的,并且您需要在 Bitmap 上的方法在 *Bitmap 上定义,那么您需要嵌入 *Bitmap。

  • 如果 Renderer 作为指针传递,那么您可以毫无问题地将 Bitmap 作为值嵌入(在这种情况下仍然可以访问指针方法)。

  • 如果 Bitmap 具有返回指针的构造函数,并且 Bitmap 的零值不可用,则您需要嵌入 *Bitmap,因为您不想鼓励按值复制 Bitmap 值。

  • 如果所有 Bitmap 方法都是值方法,那么您肯定要按值嵌入。

在您这里的特定情况下,我可能会按值嵌入,因为类型很小 - 它为您提供访问位置和更少的内存分配。


查看完整回答
反对 回复 2021-09-13
?
温温酱

TA贡献1752条经验 获得超4个赞

通过嵌入类型,您通常希望从呼叫转移中受益。*Bitmap的方法集是一个超集的Bitmap的方法集。所以在大多数情况下你会想要 embed *Bitmap,除非它的所有方法都有一个类型的接收器Bitmap或者方法将它设置为空,在这种情况下你可以避免间接。


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信