Go by Example: [14] Variadic Functions

Variadic Functions

가변함수라는 것은, 함수를 호출할때 불특정 다수개의 인자를 전달할 수 있는 기능입니다.
대표적인 것이, 지금까지 무심코 사용해왔던, fmt.Println()함수 입니다.

package main

import "fmt"

func sum(nums ...int) {              // [1]
    fmt.Print(nums, " ")
    total := 0
    
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}

func main() {
    
    sum(1, 2)                        // [2]
    sum(1, 2, 3)
    
    nums := []int{1, 2, 3, 4}        // [3]
    sum(nums...)
}
  1. 정수형(int)인자 불특정 다수개를 인수로 처리하는 함수를 선언했습니다. (... 키워드)
  2. 가변함수는 특정개수를 지정해서 호출하면 알아서 처리합니다.
  3. 심지어 가변함수의 인자로 슬라이스를 전달해도 정확하게 처리하고 있습니다.

실행하면 다음과 같습니다.

$ go run variadic-functions.go 
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10

Go언어의 또다른 특징중 하나는 클로저(Closures)를 언어차원에서 지원합니다.