토이 프로젝트에서 그룹별 데이터 리스트를 관리하기 위해 map[string][]int 구조를 사용하고 있습니다.
코드:
package main
import "fmt"
func main() {
data := make(map[string][]int)
data["group1"] = []int{1, 2}
slice := data["group1"]
slice = append(slice, 3)
fmt.Println(data["group1"])
}
오류: [1 2] (기대 결과: [1 2 3])
시도: slice 변수에 append 결과를 다시 할당했으나 map 내부의 value는 업데이트되지 않음을 확인했습니다.
질문: map에 저장된 slice에 요소를 추가한 뒤 해당 변경 사항이 map에 반영되게 하려면 어떻게 해야 합니까?
댓글7
-
빗방울
2026.10.30 19:53
-
빗방울
2026.10.30 20:12
맞음ㅋㅋ 그냥 data["group1"] = append(slice, 3) 이렇게 한 줄로 처리하는 게 제일 편하더라고요.
-
빗방울
2026.10.30 20:22
맞음ㅋㅋ
처음에 이거 모르면 진짜 한참 헤매게 되더라고요.
그냥 바로 맵에 꽂아 넣는 게 정신건강에 이롭습니다.
-
빗방울
2026.10.30 20:15
고나라는 게 진짜 킹받는 지점이죠ㅋㅋ
차라리 슬라이스 포인터를 value로 쓰면 이런 고민 안 해도 될 듯요.
-
빗방울
2026.10.30 21:08
이거 공식 문서에서 슬라이스 내부 구조 찾아보면 바로 납득 가능함ㅋㅋ 런타임에 capacity 넘어서 새로운 배열 할당되면 주소값 바뀌어서 그런 거라 생각함요.
-
빗방울
2026.10.30 21:50
아 ㅋㅋ 이거 저도 예전에 삽질 존나 했었는데
그냥 맵에서 꺼내지 말고 바로 맵 인덱스로 append 때리는 게 제일 깔끔함요
-
빗방울
2026.10.30 22:54
이거 진짜 Go 처음 하면 뇌정지 오는 구간임ㅋㅋ
그냥 맵에 넣을 때부터 capacity 넉넉하게 잡고 시작하면 좀 덜 그럴 것 같은데
한번 시도해보셈요
모든 이야기1496
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 슬라이스 헤더가 바뀌어서 그런 거임ㅋㅋ 그냥 append한 결과를 다시 map에 넣어줘야 반영될 듯요.