はじめに
Structのポインタを渡して中身を変更するときに子要素のStructの中身も変更できるのか分からなかったので検証しました。
バージョン:Go 1.16
検証
package main
import "fmt"
type Child struct {
AAA string
}
type Parent struct {
BBB string
Child Child
}
func changeParent(p *Parent) {
p.BBB = "ccc"
}
func changeChild(p *Parent) {
p.Child.AAA = "ddd"
}
func changeChildDirect(c *Child) {
c.AAA = "eee"
}
func main() {
c := Child{
AAA: "aaa",
}
p := Parent{
BBB: "bbb",
Child: c,
}
fmt.Println(p)
// {bbb {aaa}}
changeParent(&p)
fmt.Println(p)
// {ccc {aaa}}
// これは当然変わる
changeChild(&p)
fmt.Println(p)
// {ccc {ddd}}
// 子要素もちゃんと変わった
changeChildDirect(&c)
fmt.Println(p)
// {ccc {ddd}}
// オブジェクトを渡した時点で中身がコピーされるのか、元の子要素を変えてもここは変わらない。
}
結論
親要素のポインタで子要素のStructの中身も変わる。