概要
Go言語において、構造体へのポインタをデリファレンスして得られた値を新しい変数に格納すると、その変数は元の構造体のデータのコピーになるということを知ったので備忘録のため投稿します
実例
下記を見ると、構造体へのポインタをデリファレンスしたcopiedPerson
を変更してもoriginalPerson
の値が変わらないことが分かります。
package main
import "fmt"
type Person struct {
firstName string
lastName string
}
func main() {
originalPerson := &Person{"Taro", "Yamada"}
fmt.Println(originalPerson) // &{Taro Yamada}
// 構造体のフィールドを変更します。
originalPerson.firstName = "太郎"
originalPerson.lastName = "山田"
fmt.Println(originalPerson) // &{太郎 山田}
// copiedPerson は originalPerson のコピーです。
copiedPerson := *originalPerson
// copiedPerson のフィールドを変更しても、originalPerson には影響しません。
copiedPerson.firstName = "次郎"
fmt.Println(originalPerson) // &{太郎 山田}
fmt.Println(copiedPerson) // {次郎 山田}
}