Masalah:
Apabila cuba menghantar sekeping hirisan sebagai hujah yang tidak dibungkus kepada variadic fungsi, ralat kompilasi berlaku. Ralat menunjukkan ketidakupayaan untuk menetapkan jenis hirisan sumber kepada jenis parameter variadik destinasi.
Penjelasan:
Menurut spesifikasi Go, fungsi dengan parameter variadic jenis .. .T menjangkakan satu keping jenis []T sebagai hujah. Walau bagaimanapun, dalam kes sekeping hirisan, [][]T, syarat ini tidak dapat dipenuhi.
Penyelesaian:
Untuk menyelesaikan isu ini, sekeping baharu jenis yang diperlukan []T mesti dicipta dan diisi dengan nilai yang dikehendaki. Potongan baharu ini kemudiannya boleh dihantar tanpa pembungkusan menggunakan operator elipsis (...).
Contoh:
<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>
Output:
2
Dalam contoh ini, fungsi unpack() dipanggil dengan elemen unpacked sliceOfSlices sebagai argumen. Fungsi len() digunakan untuk menunjukkan bilangan argumen yang diluluskan, yang menunjukkan bahawa kedua-dua elemen kepingan bersarang dibongkar.
Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Sekeping Slice sebagai Hujah yang Dibongkar kepada Fungsi Variadik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!