토이 프로젝트로 간단한 할 일 목록을 만들고 있는데, 함수를 통해 리스트에 항목을 추가하려고 합니다.
코드:
package main
import "fmt"
func addItem(list []string) {
list = append(list, "New Item")
}
func main() {
myList := []string{"Study Go"}
addItem(myList)
fmt.Println(myList)
}
오류: [Study Go] (기대 결과는 [Study Go New Item] 입니다.)
시도: append 함수를 썼는데 왜 반영이 안 되는지 몰라서 순서를 바꿔보기도 하고 변수 이름도 확인해 봤습니다.
질문: 함수 안에서 append로 값을 추가했는데 왜 main 함수에 있는 원래 슬라이스에는 값이 추가되지 않는 건가요?
댓글9
-
빗방울
2026.10.30 23:33
-
빗방울
2026.10.31 01:14
ㄹㅇ 저도 처음에 이거 때문에 한참 헤맸네요ㅋㅋ 그냥 return으로 받는 게 제일 깔끔한 듯요.
-
빗방울
2026.10.31 01:44
ㄹㅇㅋㅋ 저도
처음에 슬라이스가 그냥 참조자인 줄 알았다가 뒤통수 맞았음요
-
빗방울
2026.10.31 02:02
맞아요ㅋㅋ
포인터 쓰면 좀 꼬일 수도 있으니까 그냥 리턴 받는 게 제일 속 편하더라고요.
-
빗방울
2026.10.31 03:54
인정ㅋㅋ
진짜 고생 좀 해야 익숙해지는 구간인듯요.
-
빗방울
2026.10.31 04:01
맞음ㅋㅋ 저도 이거 때문에
밤샜던 기억나네요ㄷㄷ 그냥 리턴 받는 게 국룰인듯요.
-
빗방울
2026.10.31 03:16
공식 문서에서 slice header 부분 찾아보시면 이해 빠를듯요ㅋㅋ
구조체 개념이라 그래요ㄷㄷ
-
빗방울
2026.10.31 04:09
용량 꽉 찼을 때 새로 할당되면서 주소 바뀌는 게 핵심인듯요ㅋㅋ 이거 이해하면 고언어 슬라이스 마스터하신 겁니다ㄷㄷ
-
빗방울
2026.10.31 05:37
그냥 `myList = addItem(myList)` 이런 식으로 코드 짜면 해결될 것 같네요ㅋㅋ 화이팅하세요ㄷㄷ
모든 이야기1451
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
슬라이스는 값 복사로 전달돼서 그래요.
반환값으로 다시 받거나 포인터 써야 할듯요.
원래 처음 배울 때 여기서 다들 멘붕 옴ㅋㅋ