是否将结构初始化为指针

type Vertex struct {

    X, Y float64

}


func main() {

    v := Vertex{3, 4}

    fmt.Println(v)


    d := &Vertex{3, 4}

    fmt.Println(d)

}

http://play.golang.org/p/XluyUHL2y7


这两种初始化Vertex结构的方法有什么区别?


我知道第二个是用指针分配,但在实践中我看不出这个解决方案有什么不同。


拉丁的传说
浏览 208回答 2
2回答

森栏

在这两种情况下,顶点结构体以相同的方式初始化。第一个表达式返回值,它是一个初始化的 Vertex 结构。使用 6g 的对齐规则,这意味着您将获得 8+8 = 16 个字节的 Vertex 结构,因为每个 float64 的大小为 8 个字节。第二个表达式分配内存,足够 8+8 = 16 个字节,将其用作 Vertex 结构,对其进行初始化并返回一个指针,该指针的大小为 4 或 8 个字节,具体取决于您的架构。在实践中存在许多差异。这两个值的方法集,即 Vertex 结构体和 *Vertex 指针,可能不同。根据您需要传递 Vertex 结构的频率,传递指向它的指针可能会更有效,也可能不会更有效。如果您将 Vertex 结构传递给函数,该函数将获得一个副本,并且您的 Vertex 结构将永远不会被修改。如果您传递 *Vertex,则您的底层 Vertex 可能会更改。这可能是也可能不是您的意图:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go