【发布时间】:2018-08-21 10:31:21
【问题描述】:
我有一个带有单一方法的简单结构:
type Person struct {
name string
}
func (p Person) SetName(name string) {
p.name = name
}
以下输出:
dave := Person{}
dave.SetName("Dave")
fmt.Println(dave.name)
将是空的,因为方法接收器接受一个值(或者更准确地说是创建您传递的值的副本),因此它不会修改您的基础值。
如果我把方法改成这样:
func (p *Person) SetName(name string) {
p.name = name
}
输出将是“戴夫”。
现在我不明白的是我不应该在指针上调用方法吗? 所以在初始化我的对象时,我应该这样做:
dave := &Person{}
而不是这个:
dave := Person{}
还使用 go 的反射包,我试图找出以下值:
&Person
发现它是*Person,这很好。当我打印值时,虽然我没有得到内存位置,但与打印指向 int 的指针的值相比:
a := 4
fmt.Println(&a)
我一直在阅读文档,提出问题,但我学得越多,我就越想知道我是否遗漏了一些简单的东西,因为很多人并不认为这一切都令人困惑。
【问题讨论】:
-
感谢这些。使我的问题有点重复,但至少关于地址的部分是独一无二的。
-
这也是其他问题的重复...
-
你能找到一个吗?我似乎找不到任何东西。更令人困惑的是,我可以通过获取指向指针的指针来获取结构对象的地址
标签: go