在 Go 中,可變參數函數接受不定數量的特定類型的參數。將切片的切片傳遞給此類函數時,了解所涉及的類型轉換和解包機制至關重要。
如果切片包含與可變參數參數類型相同的元素,則可以在不使用切片的情況下傳遞切片拆包。但是,如果切片中包含混合類型或切片中包含切片,情況會變得更加複雜。
根據 Go 規範,如果可變參數函數的最終參數可分配給切片類型,則它可以如果後面跟有 ...,則將原封不動地作為可變參數的值傳遞。這意味著不會建立新的切片。
對於切片的切片,切片本身無法被指派到可變參數(類型為 []interface{})。這就是為什麼在嘗試將 sliceOfSlices... 傳遞給 unpack 函數時會拋出錯誤。
要解決此問題,需要一個中間步驟。必須建立適當類型的新切片(在本例中為 []interface{}),並將切片切片的元素複製到其中。然後可以使用....
將這個新切片傳遞給解包函數,例如:
<code class="go">var sliceOfSlices2 []interface{} for _, v := range sliceOfSlices { sliceOfSlices2 = append(sliceOfSlices2, v) } unpack(sliceOfSlices2...)</code>
此方法可確保切片切片的每個元素單獨傳遞給解壓縮函數,如預期。
以上是如何在 Go 中將切片作為可變參數傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!