考虑下面的简单程序,我们在指向结构的指针上定义一个方法Vertex,然后用一个指针调用它。package mainimport ( "fmt")type Vertex struct { X, Y float64}func (v *Vertex) Mutate() { v.X = 8}func main() { v := &Vertex{3, 4} v.Mutate() fmt.Println(v.X)}这个程序的输出是8,这是我们期望的,因为我们将一个指针传递给一个接受一个指针的方法。但是,以下调用的输出也为 8。func main() { v := Vertex{3, 4} v.Mutate() fmt.Println(v.X)}对称地,如果我们重新定义方法Mutate以采用 aVertex而不是指针,那么无论传递的是指针还是结构体,突变都会失败。这种行为似乎意味着参数v或指向v传递的指针完全取决于方法的定义,而不是实际传递的内容。这是一个正确的解释吗,情况总是这样吗?如果不是,对这种行为的正确解释是什么?
1 回答
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消