fmt.Fprintf ラッパーの可変個引数関数の引数パススルーの問題
この記事では、単純な fmt.Fprintf ラッパーを作成するときに発生する問題に対処します。可変数を受け入れるargument.
問題: ラッパー呼び出し時の出力が正しくない
ラッパー関数 Die("foo") を呼び出すと、予期しない出力が生成されます: "foo%!( EXTRA []インターフェイス {}=[])」。これにより 2 つの疑問が生じます:
解決策: スプレッドを使用するOperator
Go の可変引数関数は引数をスライスとして受け取ります。この場合、ラッパー関数 Die には []interface{} 型のパラメータ引数があります。ただし、この引数を fmt.Sprintf に渡す場合、[]interface{} 型の単一の引数として扱われます。
この問題を解決し、args の各値を個別の引数として渡すには、スプレッド演算子を使用します。 (...) を使用する必要があります。この構文を fmt.Sprintf 呼び出しに追加すると、args の個々の値が展開され、それに応じて渡されます。
str := fmt.Sprintf(format, args...)
このアプローチにより、ラッパー関数が変数引数を fmt.Fprintf に正しく渡すことが保証されます。
以上が可変引数を指定して `fmt.Fprintf` ラッパーを呼び出すと、「foo%!(EXTRA []interface {}=[])」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。