問題:
スライスのスライスをアンパックされた引数として可変個引数に渡そうとするとき関数を実行するとコンパイルエラーが発生します。このエラーは、ソース スライス タイプを宛先の可変個引数パラメータ タイプに割り当てることができないことを示しています。
説明:
Go 仕様によれば、タイプ .. の可変個引数パラメータを持つ関数。 .T は、引数として []T 型の単一スライスを必要とします。ただし、スライスのスライス [][]T の場合、この条件は満たされません。
解決策:
この問題を解決するには、必須のタイプ []T を作成し、必要な値を入力する必要があります。この新しいスライスは、省略記号演算子 (...) を使用してアンパックして渡すことができます。
例:
<code class="go">package main import ( "fmt" ) func unpack(args ...interface{}) { fmt.Println(len(args)) } func main() { sliceOfSlices := [][]int{ []int{1, 2}, []int{101, 102}, } // Create a new slice of type []interface{} sliceOfInterfaces := []interface{}{} for _, v := range sliceOfSlices { sliceOfInterfaces = append(sliceOfInterfaces, v) } unpack(sliceOfInterfaces...) // Pass unpacked values }</code>
出力:
2
この例では、sliceOfSlices のアンパックされた要素を引数として unpack() 関数が呼び出されます。 len() 関数は、渡された引数の数を示すために使用されます。これは、ネストされたスライスの両方の要素がアンパックされていることを示します。
以上がGoの可変引数関数にスライスのスライスをアンパックされた引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。