pointers - 游览何时不使用指针指向变量中的结构字面量

标签 pointers go

随手一拍 tour page 28page 53

它们显示了一个变量,该变量是指向结构字面量的指针。为什么这不是默认行为?我对C不熟悉,所以很难理解它。我唯一能看到使用指针可能不是更有益的情况是结构文字是唯一的,并且不会用于其余程序,因此您希望尽快将其作为垃圾收集.我什至不确定像 Go 这样的现代语言是否可以这样工作。

我的问题是这样的。什么时候应该将指向结构字面量的指针分配给变量,什么时候应该将结构字面量本身分配?

谢谢。

最佳答案

在以下情况下使用指针而不是结构文字会很有帮助

  • 结构体很大,你可以传递它
  • 你想分享它,即所有修改都会影响你的结构而不是影响副本

在其他情况下,只需使用结构字面量就可以了。对于一个小结构,您可以像使用 int*int 一样考虑这个问题:大多数时候 int 很好,但有时您传递一个指针,所以接收者可以修改您的 int 变量。

在您链接到的 Go tour 练习中,Vertex 结构很小,并且具有与任何数字大致相同的语义。在我看来,直接将其用作结构并在 #53 中定义 Scaled 函数会很好。像这样:

func (v Vertex) Scaled(f float64) Vertex {
    v.X = v.X * f
    v.Y = v.Y * f
    return v
}

因为有

v2 := v1.Scaled(5)

会创建一个新的顶点,就像

var f2 float32 = f1 * 5

创建一个新的 float

这类似于标准 Time 结构(定义 here )的处理方式,通常保存在 Time 类型的变量中,而不是 *时间.

但没有明确的规则,根据用途,我很可能同时保留 ScaleScaled

关于pointers - 游览何时不使用指针指向变量中的结构字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13760793/

相关文章:

c++ - 第二行列数较少 "cuts off"第一行列数较多

c - 通过函数返回指向静态常量字符串的指针

regex - golang 正则表达式将所有内容匹配到 "."

与持续时间一起去例行公事

pointers - R 中指针的解决方法?

Android:从不兼容的指针类型初始化 JNI 函数指针

Golang 在交叉编译时无法在 x86_64 机器上链接 aarch64/arm64 二进制文件

excel - 使用 excelize Golang 时公式错误

c - 如何在 C 中将 char 数组复制到 char 指针?

go - golang 中的空函数