공부/Go

Go에서 배열 구조체를 포함한 구조체의 값 변경할 때 주의사항

토고미 2023. 12. 14. 20:40

Go에서 이미 값이 할당된 다중 구조체(nested structure)의 내부 배열 구조체에 어떤 값을 변경할 때는

for 문에서 인덱스를 사용해서 직접 접근해야한다.

 

가끔 습관적으로 for k, v := range S 를 하며 v를 통해 값을 할당하는 실수를 저지르게 된다.

type Outer struct {
	name  string
	inner []Inner
}

type Inner struct {
	A int
	B int
}

func changeInner() {
	outer := Outer{
		name: "togomi",
		inner: []Inner{
			{
				A: 5,
				B: 6,
			},
		},
	}

	for k, v := range outer.inner {
		// 잘못된 방법
		v.A = 1
		v.B = 2

		// 옳은 방법
		outer.inner[k].A = 1
		outer.inner[k].B = 2
	}
}