https://isehara-3lv.sakura.ne.jp/blog/2023/01/17/goは値渡し言語、/
で、Goは値渡しなので、渡し先で値を変更するならポインター渡しと言っていますがその例です。
以下のソースで関数printPersonにポインターを渡した時はjohnの値が変更されていますが、値渡しにすると元の値は変更されません。
package main
import (
"fmt"
)
type Person struct{
LastName string
FirstName string
Age int
}
func (p Person) printPerson(p1 *Person) Person{
p1.Age = 72
fmt.Println("John : ", p1.FirstName, p1.LastName, p1.Age)
return *p1
}
func main() {
var john Person
john.FirstName = "John"
john.LastName = "Wein"
john .Age = 70
john.printPerson(&john)
fmt.Println("returned age : ", john.Age)
}
以下はポインタ渡しと値渡しでの実行結果です、確かに値渡しではオリジナルの情報は更新されません。
<ポインター渡し>
John : John Wein 72
returned age : 72
<値渡し>
John : John Wein 72
returned age : 70
admin