当前位置: 首页 > 面试题库 >

使用指针或值嵌入Go中

齐财
2023-03-14
问题内容

我可以使用指针和值嵌入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
}

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 当我想将一个结构嵌入另一个结构中时,应该使用指针还是值? 例如 要么 问题答案: 您可以使用其中之一:对于struct type,规范中提到: 使用类型但没有显式字段名称声明的字段是 匿名 字段,也称为 嵌入 字段或该类型在结构中的嵌入。 必须将嵌入式类型指定为类型名称或指向非接口类型名称的指针,并且本身不能为指针类型。 既然是 不是 一个接口,可以使用类型或指针为匿名字段的类型。 E

  • 问题内容: 在围棋文档说(强调): 使用时间的程序通常应将其存储并 作为值(而不是指针) 传递。也就是说,时间变量和结构字段的类型应该是time.Time,而不是* time.Time。一个时间值可以同时被多个goroutine使用。 最后一句话(关于在多个goroutine中同时使用Time值)是否是“通常”应将它们作为值而不是指针“存储”并传递的唯一原因?这对于其他结构也是常见的吗?我尝试寻找

  • Go支持指针,可以用来给函数传递变量的引用。 package main import "fmt" // 我们用两个不同的例子来演示指针的用法 // zeroval函数有一个int类型参数,这个时候传递给函数的是变量的值 func zeroval(ival int) { ival = 0 } // zeroptr函数的参数是int类型指针,这个时候传递给函数的是变量的地址 // 在函数内部对

  • 问题内容: 我想我了解什么是指针,但我不太了解何时使用它。 下面的摘录来自“ A Tour of Go”。 “ * Vertex”和“&Vertex”的目的是什么? 我用“顶点”替换了它们,并且运行良好。 问题答案: 这不是指针/值区分的特别好例子,因为在这种情况下它们是可互换的!当您需要(从另一个函数)“远程”更改数据时,指针很有用。 正如您将注意到的那样,这不会改变任何东西(严格来说,它会更改

  • Go 指针 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。 当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址: Go 指针

  • 主要内容:认识指针地址和指针类型,从指针获取指针指向的值,使用指针修改值,示例:使用指针变量获取命令行的输入信息,创建指针的另一种方法——new() 函数与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制 数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。 指针(pointer)在