对于返回的Package变量,GoLang值未更新

时间:2016-08-21 19:31:00

标签: pointers go

您好我是新手,我正试图了解为什么更新返回值时,方法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())
}    

1 个答案:

答案 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())
}    

playground example