Pointers Golang结构引用其他结构的指针或无指针以及原因
我读过一些与“为什么使用指针和为什么不使用指针”相关的堆栈溢出问题,但我不太理解 所以,我想从Pointers Golang结构引用其他结构的指针或无指针以及原因,pointers,go,struct,Pointers,Go,Struct,我读过一些与“为什么使用指针和为什么不使用指针”相关的堆栈溢出问题,但我不太理解 所以,我想从golang的角度,根据自己的情况去理解和学习 我有两个结构 type Discussion struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Owner *User `json:"owner"` } type User
golang
的角度,根据自己的情况去理解和学习
我有两个结构
type Discussion struct {
ID string `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Owner *User `json:"owner"`
}
type User struct {
ID string `json:"id"`
Name string `json:"name"`
}
在上面的讨论
结构中,您可以看到,我为所有者
字段使用了*用户
考虑到这种情况,在为下面的讨论
创建值后,我不必更改所有者
的数据,我应该只使用用户
,还是最好使用下面的*用户
func main() {
u := User {
ID: "2",
Name: "StackOverflow",
}
d := Discussion{
ID: "1",
Title: "This is my family",
Content: "I love my family",
Owner: &u,
}
}
或者,我应该像下面这样使用-
type Discussion struct {
ID string `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Owner User `json:"owner"`
}
type User struct {
ID string `json:"id"`
Name string `json:"name"`
}
func main() {
u := User {
ID: "2",
Name: "StackOverflow",
}
d := Discussion{
ID: "1",
Title: "This is my family",
Content: "I love my family",
Owner: u,
}
}
基于以上两种情况,我有以下问题
它们做的事情完全不同,只是在一些琐碎的例子中看起来是一样的。因此,你应该选择一个做你想做的,而不是基于性能的。你能详细说明
他们做完全不同的事情吗
,我想了解他们,或者如果你能提供任何参考URL,我可以根据我的上述情况或附近的任何情况了解更多。那将是很大的帮助。感谢任何一个比另一个“更好”,它们是不同的。任何来源或参考来了解更多关于它,为什么它是不同的基于golang的观点。ffAdvise 1在所述形式中是错误的。指针本身并不是更快,它们可能更慢(例如,由于非本地内存访问和缓存未命中)。如果我传递一个结构,而它不在本地内存中,则仍然存在缓存未命中。或者我弄错了吗?如果你有一个只有值类型的结构,就像第二个版本的结构讨论一样,那么其中的所有内容,包括所有者字段,都会在内存中不断地显示出来。这是一个不好的例子,因为字符串是非局部的,但请考虑结构a{X,Y int;V结构{W bool,Z float64}
和切片[]a
。读取整个切片只是一次顺序内存访问,即使您读取A.V.Z。如果您将V作为指针,则迭代切片并读取A.V.Z将变得非线性。它不是关于将参数传递给函数。这总是很慢,因为函数。