スライスのスライスをアンパックして、それらを可変長関数の引数として送信することに興味があります。我々はそれが動作するインタフェースのスライスに渡すためにwan't場合、我々はそれを解凍するかどうスライスのスライスを展開する
func unpack(args ...interface{})
、それは問題ではない:
をのは、我々は可変引数のパラメータを持つ関数があるとしましょう
slice := []interface{}{1,2,3}
unpack(slice) // works
unpack(slice...) // works
スライススライスがあると面倒です。ここでコンパイラは、私たちが解凍バージョンを渡すことはできません:
sliceOfSlices := [][]interface{}{
[]interface{}{1,2},
[]interface{}{101,102},
}
unpack(sliceOfSlices) // works
unpack(sliceOfSlices...) // compiler error
エラーは言う:
タイプ[]インターフェース{としてsliceOfSlices(タイプ[] []インターフェイス{})を使用することができません} in unpackの引数
私は明確に[]interface{}
型を関数に渡すことができるので、なぜこのようなことが起こるのかわかりません。どのようにして解凍された内容を解凍してsliceOfSlices
の引数として解凍することができますか?
遊び場の例は:https://play.golang.org/p/O3AYba8h4i