2014-09-10 5 views
1

어떻게 함수를 인수로 사용할 수 있습니까? fmt.Printf?변수 개수가 다양한 함수로 인수

첫 번째 문제는 먼저 전달할 함수 유형을 정의해야한다는 것입니다.

type FunctionWithVariableArgumentLength func(s string, object1 type1, ..., objectn typen) 

두 번째 문제

하나의 목록에서 인수가 fmt.Printf에 같이있을 수 있습니다 어떤 종류 알고하지 않습니다. http://golang.org/pkg/fmt/#Printf

그래서이 같은 인수로 함수를 받아들이는 함수를 정의 할 수 있습니다 :

답변

4

의 하나로서 유사한 서명을 사용

func exe(f func(string, ...interface{}) (int, error)) { 
    f("test %d", 23) 
} 
func main() { 
    exe(fmt.Printf) 
} 

Demonstration

+0

동일한 아이디어가 더 완벽합니다. +1 – VonC

2

당신은 다른 기능과 같은 프로토 타입이있다 fmt.Printf

func yourFunction(a ...interface{}) 
2

첫 번째 부분에 답하려면 가변 인수를 사용하여 함수를 작성하십시오.

// sums returns the total of a variable number of arguments 
func sum(numbers ...int) total int { 
    total = 0 
    for _, n := range numbers { 
     total += n 
    } 
    return total 
} 

제 2 부분은 단단하지만 같은 함수 정의는 같습니다

func doVarArgs(fmt string, a ...interface{}) { 

변수 a이 유형 interface{}의 값의 조각이 포함되어 있습니다. 그런 다음 각 인수를 가져 오는 슬라이스를 반복하고 패키지 "reflect"를 사용하여 각 인수의 유형을 쿼리합니다.

자세한 설명은 http://golang.org/pkg/reflect/을 참조하십시오.

관련 문제