ホームページ  >  記事  >  バックエンド開発  >  Go で可変引数関数ラッパーに引数を効率的に追加するにはどうすればよいですか?

Go で可変引数関数ラッパーに引数を効率的に追加するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 01:29:02441ブラウズ

How to Efficiently Append Arguments to a Variadic Function Wrapper in Go?

可変個引数関数ラッパーへの効率的な追加

fmt.Println などの Go の可変個引数関数を使用すると、可変数の引数を渡すことができます。ただし、デバッグ目的でラッパー関数を使用する場合、追加の引数を追加するとメモリ割り当ての問題が発生する可能性があります。

提供された例では、追加の引数を使用して fmt.Fprintln 関数を拡張しようとする最初の 2 つの試行ではエラーが発生します。 3 番目の方法では、新しいスライスを手動で構築する必要があり、オーバーヘッドが発生します。

メモリの再割り当てを回避するには、append 関数を利用できます。

<code class="go">func Debug(a ...interface{}) {
    if debug {
        fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...)...)
    }
}</code>

このワンライナーは、既存のスライスを取得します。引数 (a) を取得し、append を使用して追加の項目 (prefix と sep) で拡張します。結果のスライスは fmt.Fprintln に渡され、明示的なメモリ割り当てを必要とせずに効率的な引数展開が保証されます。

以上がGo で可変引数関数ラッパーに引数を効率的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。