type Vertex struct {
X, Y float64
}
func main() {
v := Vertex{3, 4}
fmt.Println(v)
d := &Vertex{3, 4}
fmt.Println(d)
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/XluyUHL2y7
这两种初始化Vertex结构的方法有什么区别?
我知道第二个是指针分配,但我在实践中看不出这个解决方案的任何区别.
在这两种情况下,Vertex 结构体都以相同的方式初始化。
第一个表达式返回值,该值是已初始化的 Vertex 结构。根据 6g 的对齐规则,这意味着您将获得 8+8 = 16 字节的 Vertex 结构,因为每个 float64 的大小都是 8 字节。第二个表达式分配足够 8+8 = 16 字节的内存,将其用作 Vertex 结构,初始化它并返回一个指针,该指针的大小为 4 或 8 字节,具体取决于您的体系结构。
实践中存在许多差异。这两个值(Vertex 结构体和 *Vertex 指针)的方法集可能不同。根据您需要传递 Vertex 结构的频率,传递指向它的指针可能会更有效,也可能不会更有效。如果将 Vertex 结构传递给函数,该函数将获得一个副本,并且您的 Vertex 结构将永远不会被修改。如果您传递 *Vertex,您的底层 Vertex 可能会更改。这可能是也可能不是您的意图:)