您好我是新手,我正试图了解为什么更新返回值时,方法GetPerson()返回的Package值未更新。我知道如何改变方法以使其工作,我在解释发生了什么后更多?
package main
import "fmt"
type Person struct{
FirstName, LastName string
Age int
}
var p Person = Person{"Bob","Rolf",15}
func GetPerson() Person{
return p
}
func main(){
fmt.Println(GetPerson())
rP := GetPerson()
rP.Age = 40
fmt.Println(GetPerson())
}
答案 0 :(得分:4)
GetPreson返回值的副本。对副本的更改不会反映在原始文件中。
返回指向值的指针并通过指针更新。
package main
import "fmt"
type Person struct{
FirstName, LastName string
Age int
}
var p Person = Person{"Bob","Rolf",15}
func GetPerson() *Person{ // note *
return &p // note &
}
func main(){
fmt.Println(GetPerson())
rP := GetPerson()
rP.Age = 40
fmt.Println(GetPerson())
}