状況:
可変数の引数を取る単純な_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"の代わりに)次の出力が得られます。
foo%!(EXTRA [] interface {} = [])
fmt.Fprintf
_の周りにラッパーを作成する正しい方法は何ですか?可変個引数関数は、型のスライスとして引数を受け取ります。この場合、関数はargs
という名前の[]interface{}
を受け取ります。その引数をfmt.Sprintf
に渡すと、タイプ[]interface{}
の単一の引数として渡すことになります。本当に必要なのは、args
の各値を個別の引数として渡すことです(受け取ったのと同じ方法で)。これを行うには、...
構文を使用する必要があります。
str := fmt.Sprintf(format, args...)
これは、Go仕様でも説明されています ここ 。