여러 인자를 ...매개변수로 넘기기

마지막 매개변수 p...T 타입인 가변 인자 함수 f의 내부에서는 매개변수 p의 타입이 []T와 같다. 함수 f 호출시 매개변수 p에 해당하는 인자들이 없다면, 매개변수 p에는 nil 값이 전달된다. 인자가 있는 경우, []T 타입의 새 슬라이스가 넘겨진다. 슬라이스의 내재 배열은 새로 생성되며 실제 인자와 같은 값을 가지므로, 각 인자는 모두 T할당 가능해야 한다. 슬라이스의 길이와 용량(capacity)은 각 호출 시점에 매개변수 p에 할당된 인자의 수에 따라 달라진다.

Greeting 함수를 다음과 같이 호출했을 때,

func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")

Greeting 함수 안에서 who는 첫 번째 호출에서는 nil값을, 두 번째 호출 때는 []string{"Joe", "Anna", "Eileen"}값을 갖는다.

마지막 인자를 슬라이스 타입 []T에 할당할 수 있다면, 인자 뒤에 ...을 붙여서 이 인자를 그대로 ...T 매개변수에 대한 값으로 전달할 수 있다. 이 경우에는 새로운 슬라이스가 생성되지 않는다.

슬라이스 s에 대해 다음과 같이 호출했을 때,

s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)

Greeting 함수 안에서 whos 와 같은 값을 가질 것이고, 내재 배열도 s와 같을 것이다.

results matching ""

    No results matching ""