2016-08-21 23 views
0

こんにちは私は新しいですが、返された値を更新したときにメソッドGetPerson()によって返されたパッケージの値が更新されない理由を頭に浮かべています。私はそれが動作するように方法を変更することができます知っています、私は何が起こっているの説明の後に?返されるGoLang値が更新されていません。パッケージ変数

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

答えて

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