【发布时间】:2017-10-08 23:56:48
【问题描述】:
我将一些 Individual 对象存储在一个切片中。在将其附加到切片之前,我打印了 Individual 对象的名称。
将其存储在切片中后,我将其作为指针检索并希望将名称更改为"Peter",但更改不起作用,因为它仍然打印"Steve"。为什么?
type Individual interface {
GetName() *string
SetName(name string)
}
type Person struct {
name string
}
// Implement functions of the Individual interface
func (p Person) GetName() *string {
return &p.name
}
func (p Person) SetName(newName string) {
name := p.GetName();
*name = newName
}
var individuals []Individual
func main() {
person := Person{name: "Steve"}
fmt.Println(person)
individuals = append(individuals, person) // append Person to slice
p1 := individuals[0] // Retrieve the only Person from slice
p1.SetName("Peter") // Change name
fmt.Println(p1) // Should print "Peter", but prints "Steve"
fmt.Println(person) // Should print "Peter", but prints "Steve"
}
【问题讨论】: