[golang] Implicit memory aliasing in for loop. 해결책

해결책


사용자 지침에 for index, user := range users 로 접근했기 때문입니다.for index := range usersuser[i]를 이용하여 접근 지침이 해결됩니다.

왜 안 되지?

for index, user := range usersgoo에서 상술한 사용자의 주소는 일정한 것 같습니다.
그래서 분명히 포문을 돌리고 있지만 같은 곳을 가리키고 있다.
이게 Implicit memory aliasing 부분이죠.
고랜드도 에러와 워닝을 토하지 않아 어느새 큰 사태로 변할까 두려웠다.
조심하겠습니다.

설치 예


before.go
func NewResultUsers(users []User) []ResultUser {
	ru := make([]ResultUser, len(users))
	for i, user := range users {
		ru[i] = *NewResultUser(&user)
	}
	return ru
}
after.go
func NewResultUsers(users []User) []ResultUser {
	ru := make([]ResultUser, len(users))
	for i := range users {
		ru[i] = *NewResultUser(&user[i])
	}
	return ru
}

컨디션

  • MacBook Air (M1, 2020)
  • go -v 1.15
  • echo -v 4.3.0
  • Docker version 20.10.8, build 3967b7d
  • docker-compose version 1.29.2, build 5becea4c
  • 참고 자료

  • https://husni.dev/beware-of-implicit-memory-aliasing-in-go-foor-loop/
  • 좋은 웹페이지 즐겨찾기