cap에 여유가 있으면 원본 배열에 쓰고, 넘치면 새 배열로 옮긴다 ① cap에 여유가 있을 때 같은 배열에 쓴다 → 원본이 바뀐다 b := a[1:3] // len 2, cap 4 전 1 2 3 4 5 b = append(b, 99) 후 1 2 3 99 5 a == [1 2 3 99 5] · a의 4가 덮였다 ② cap을 넘을 때 새 배열로 복사 → 원본과 연결이 끊긴다 c := a[1:3:3] // cap 2 a 1 2 3 4 5 c = append(c, 77) 새 배열 2 3 77 a는 그대로 · 이후 c와 a는 따로 논다 Go · 개념 정리Go append가 원본을 바꾸는 이유슬라이스 · map · string 내부 구조Go에서 자주 만나는 버그는 들고 있다고 생각한 것과 실제로 들고 있는 것이 다를 때 생긴다. 슬라이스는 데이터가 아니라 창이고, map은 주소를 보장하지 않고, string은 문자 배열이 아니다. 세 자료구조의 레이아웃을 하나씩 열어 본다.2026.08.11