随手一拍 tour page 28和 page 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
类型的变量中,而不是 *时间
.
但没有明确的规则,根据用途,我很可能同时保留 Scale
和 Scaled
。
关于pointers - 游览何时不使用指针指向变量中的结构字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13760793/