ホームページ > バックエンド開発 > Golang > 可変引数を指定して `fmt.Fprintf` ラッパーを呼び出すと、「foo%!(EXTRA []interface {}=[])」が表示されるのはなぜですか?

可変引数を指定して `fmt.Fprintf` ラッパーを呼び出すと、「foo%!(EXTRA []interface {}=[])」が表示されるのはなぜですか?

Susan Sarandon
リリース: 2024-11-11 02:57:03
オリジナル
172 人が閲覧しました

Why does

fmt.Fprintf ラッパーの可変個引数関数の引数パススルーの問題

この記事では、単純な fmt.Fprintf ラッパーを作成するときに発生する問題に対処します。可変数を受け入れるargument.

問題: ラッパー呼び出し時の出力が正しくない

ラッパー関数 Die("foo") を呼び出すと、予期しない出力が生成されます: "foo%!( EXTRA []インターフェイス {}=​​[])」。これにより 2 つの疑問が生じます:

  • なぜこの余分なテキストが "foo" の後に表示されるのですか?
  • fmt.Fprintf のラッパーを作成する正しい方法は何ですか?

解決策: スプレッドを使用する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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート