我可以帮您进行中文翻译。以下是翻译结果:
我猜我必须以某种方式使用指针,但无法完全弄清楚如何使用。最初的回答
我有一个包含可以更新其字段的函数的struct
:
type Dog struct {
name string
age int
}
func (dog *Dog) growOld() {
dog.name = "old dog"
dog.age++
}
这个代码片段本身是没有问题的。但是,当这个struct
属于另一个对象,并且该对象告诉struct
更新其字段时,更改似乎发生了,但没有被应用:
原始答案:Original Answer
package main
import (
"fmt"
)
type Owner struct {
dog Dog
}
func newOwner(dog Dog) Owner {
var owner Owner
owner.dog = dog
return owner
}
func (owner Owner) tellDogToGrowOld() {
owner.dog.growOld()
}
func main() {
var dog Dog
dog.name = "dog"
owner := newOwner(dog)
owner.tellDogToGrowOld()
fmt.Println(dog) // dog's name is still `dog` and age is 0.
}
我猜我必须以某种方式使用指针,但无法完全弄清楚如何使用。最初的回答
tellDogToGrowOld
需要像你对growOld
所做的那样,在指针上进行定义。或者,Owner
的dog
字段需要是指向Dog
的指针。 - undefinedOwner
的dog
字段应该是指向Dog
的指针的方法,因为这是最接近其他语言中的“按引用传递”的方式。 - undefined