猿问

返回的包变量的 GoLang 值未更新

我想弄清楚为什么当我更新返回值时,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())

}    


互换的青春
浏览 143回答 1
1回答

拉莫斯之舞

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())}    
随时随地看视频慕课网APP

相关分类

Go
我要回答