이 글은 Effective Go를 일부 번역한 글입니다.


자료

Append

이제 내장 함수 append의 설계를 설명하는 데 모자랐던 조각을 갖췄다. append의 용법은 이전에 만든 Append 함수와 다르다. 형태는 이렇다.

func append(slice []T, elements ...T) []T

여기서 T는 주어진 유형을 대신한다. 실제 Go에선 호출자가 T 형을 정의하도록 함수를 작성할 수 없다. 그래서 append가 내장 함수인 것이다. 컴파일러가 도와줘야 하기 때문이다.

append는 조각 뒤에 요소를 덧붙이고 결과를 반환한다. 결과를 반환하는 이유는 우리가 직접 쓴 Append에서 봤듯이 기반 배열이 바뀔 수 있기 때문이다.

x := []int{1,2,3}
x = append(x, 4, 5, 6)
fmt.Println(x)

위 간단한 예제는 [1 2 3 4 5 6]을 출력한다. appendPrintf처럼 가변 개수 인수를 받아 동작한다.

하지만 Append처럼 조각에 조각을 붙이려면 어찌해야 할까? 간단하다. 위 Output 호출처럼 호출에 ...를 쓰라. 아래 토막은 위와 출력이 같다.

x := []int{1,2,3}
y := []int{4,5,6}
x = append(x, y...)
fmt.Println(x)

...가 없으면 유형이 달라 컴파일할 수 없다. yint 형이 아니다.