2012-09-08 2 views
20

여기, 인수의 가변 수를 취 간단한 fmt.Fprintf 래퍼를 작성하는 것을 시도하고이 코드를 통해 패스 : 나는 그것을 호출있을 때이동 - 가변 인자 함수 매개 변수

func Die(format string, args ...interface{}) { 
    str := fmt.Sprintf(format, args) 
    fmt.Fprintf(os.Stderr, "%v\n", str) 
    os.Exit(1) 
} 

그러나 :

Die("foo")

내가 얻을 :

foo%!(EXTRA []interface {}=[])

"foo"다음에이 텍스트가 나타나는 이유를 모르겠습니다. & fmt.Fprintf에서 래퍼를 만드는 올바른 방법은 무엇입니까?

+3

BTW, Die 함수는 [log.Fatal] (http://golang.org/pkg/log/#Fatal) 및/또는 [log.Logger.Fatalf] (http : // golang. org/pkg/log/# Logger.Fatalf)가 준비되었습니다. – zzzz

답변

35

가변 인수 함수는 인수를 형식의 조각으로받습니다. 이 경우 함수에 args이라는 []interface{}이 수신됩니다. 이 인수를 fmt.Sprintf에 전달하면이 인수를 []interface{} 유형의 단일 인수로 전달합니다. 당신이 정말로 원하는 것은 args의 각 값을 별도의 인수로 전달하는 것입니다 (받은 방법과 동일). 이렇게하려면 ... 구문을 사용해야합니다.

str := fmt.Sprintf(format, args...) 

이것은 Go 사양 here에서도 설명됩니다.