У меня есть следующий struct
, который имеет функцию, которая может обновлять свои поля:
type Dog struct {
name string
age int
}
func (dog *Dog) growOld() {
dog.name = "old dog"
dog.age++
}
Вышеописанное прекрасно работает само по себе. Однако, когда struct
принадлежит другому объекту, и указанный объект сообщает struct
обновить его поля, изменения, похоже, происходят, но не применяются:
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.
}
Я предполагаю, что должен как-то использовать pointers
, но не могу понять, как.