我很好奇開箱切片片段並將它們作爲參數發送給可變參數函數。開箱切片片段
比方說,我們有一個可變參數參數的函數:
func unpack(args ...interface{})
如果我們wan't在它的工作原理接口片來傳遞,它不一樣,如果我們解開與否無關緊要:
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(鍵入[] []接口{})類型[]接口{ }在參數解包
我不知道爲什麼會發生這種情況,因爲我們可以清楚地通過[]interface{}
類型進入函數。我怎樣才能用解壓後的內容sliceOfSlices
作爲參數來調用解壓方法?
遊樂場例如:https://play.golang.org/p/O3AYba8h4i