이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 21장 써머리입니다.
...
키워드 사용...
키워드를 사용하면 가변 인수를 처리할 수 있다.func VariadicTest(arr ...int) {
fmt.Printf("%T %v", arr, arr) //[]int [1]
}
func Test_variadic(t *testing.T) {
VariadicTest(1)
}
함수 종료 직전에 실행해야 하는 코드를 작성.
사용방법: defer 명령어
함수를 값으로 갖는 변수를 의미한다.
함수 포인터라고 부른다.
func add(a, b int) int {
return a + b
}
func mul(a, b int) int {
return a * b
}
func getOperator(op string) func(int, int) int {
if op == "+" {
return add
} else if op == "*" {
return mul
} else {
return nil
}
}
func Test_FunctionVariable(t *testing.T) {
operator := getOperator("+")
t.Log(operator(1, 2))
operator = getOperator("*")
t.Log(operator(1, 2))
}
함수 리터럴은 이름 없는 함수로 함수명을 적지 않고 함수 타입 변수값으로 대입되는 함숫값을 의미
함수명이 없기에 함수 타입 변수로만 호출 가능하다.
func getOperator(op string) func(int, int) int {
if op == "+" {
return func(a int, b int) int {
return a + b
}
} else if op == "*" {
return func(a int, b int) int {
return a * b
}
} else {
return nil
}
}
func Test_FunctionVariable(t *testing.T) {
operator := getOperator("+")
t.Log(operator(1, 2))
operator = getOperator("*")
t.Log(operator(1, 2))
}