在 Go 中,可變參數函數接受不定數量的特定類型的參數。將切片的切片傳遞給此類函數時,了解所涉及的類型轉換和解包機制至關重要。
如果切片包含與可變參數參數類型相同的元素,則可以在不使用切片的情況下傳遞切片拆包。然而,如果切片中包含多種類型的混合或切片中包含切片,情況會變得更加複雜。
根據 Go 規範,如果可變參數函數的最終參數可分配給切片類型,則可以如果後面跟有 ...,則將原封不動地作為可變參數的值傳遞。這意味著不會建立新切片。
在切片切片的情況下,無法指派切片本身到可變參數(類型為 []interface{})。這就是為什麼在嘗試將 sliceOfSlices... 傳遞給 unpack 函數時會拋出錯誤。
要解決此問題,需要一個中間步驟。必須建立適當類型的新切片(在本例中為 []interface{}),並將切片切片的元素複製到其中。然後可以使用...
將這個新切片傳遞給解包函數,例如:
var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
sliceOfSlices2 = append(sliceOfSlices2, v)
}
unpack(sliceOfSlices2...)
此方法確保切片的每個元素按預期單獨傳遞給 unpack 函數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3