按照Go 导览第28 页和第53页
它们显示了一个变量,该变量是指向结构文字的指针。为什么这不是默认行为?我不熟悉C,因此很难将其包裹住。我唯一看到的是使用指针可能不是更有利的时候是结构文字是唯一的,并且不会在其余程序中使用,因此您希望尽快对其进行垃圾回收。我什至不确定像Go这样的现代语言是否也可以那样工作。
我的问题是这个。何时应将指向结构文字的指针分配给变量,何时应分配结构文字本身?
谢谢。
在以下情况下,使用指针而不只是结构文字会有所帮助
在其他情况下,只需使用struct文字就可以了。对于小型结构,您可以像使用an int或an 来思考问题*int:多数情况下,int很好,但有时您传递一个指针,以便接收方可以修改int变量。
int
*int
在您链接到的Go游览练习中,Vertex结构很小,并且语义上与任何数字都差不多。在我看来,直接将其用作struct并Scaled在#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。
float
这类似于处理标准Time结构(此处定义)的方式,该结构通常保存在type Time而非not 变量中*Time。
Time
*Time
但是没有明确的规则,并且根据用途,我很可能会同时保留Scale和Scaled。
Scale