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 サイトの他の関連記事を参照してください。