ホームページ  >  記事  >  バックエンド開発  >  Goでスライスのスライスを可変引数として渡すにはどうすればよいですか?

Goでスライスのスライスを可変引数として渡すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 04:09:03989ブラウズ

How to Pass a Slice of Slices as Variadic Arguments in Go?

パックされていないスライスを可変引数として渡す

Go では、可変個引数関数は特定の型の引数を無制限に受け入れます。このような関数にスライスのスライスを渡す場合、関係する型変換とアンパックのメカニズムを理解することが重要です。

スライスに可変引数パラメーターと同じ型の要素が含まれている場合、スライスは変数なしで渡すことができます。開梱中。ただし、スライスに型の混合、またはスライス内にスライスが含まれている場合、状況はより複雑になります。

Go の仕様によれば、可変個引数関数の最後の引数がスライス型に割り当て可能な場合は、 ... が後に続く場合は、可変引数パラメーターの値として変更せずに渡されます。これは、新しいスライスが作成されないことを意味します。

スライスのスライスの場合、スライス自体を割り当てることはできません可変引数パラメータ ([]interface{} 型) に変換します。これが、sliceOfSlices... を unpack 関数に渡そうとするとエラーがスローされる理由です。

この問題を解決するには、中間の手順が必要です。適切なタイプの新しいスライス (この場合は []interface{}) を作成し、スライスの要素をそこにコピーする必要があります。この新しいスライスは、....

を使用して unpack 関数に渡すことができます。たとえば、

<code class="go">var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
    sliceOfSlices2 = append(sliceOfSlices2, v)
}

unpack(sliceOfSlices2...)</code>

このアプローチでは、スライスのスライスの各要素が個別に渡されるようになります。意図したとおり、 unpack 関数。

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

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