Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membongkar Sekeping Kepingan ke dalam Fungsi Variadik dalam Go?
Apabila bekerja dengan fungsi variadik yang menerima berbilang argumen, pengendalian sekeping hirisan boleh menimbulkan cabaran. Berikut ialah contoh khusus yang membongkar sekeping kepingan boleh menyebabkan ralat pengkompil:
Pertimbangkan fungsi variadik berikut:
<code class="go">func unpack(args ...interface{})</code>
Jika kita mempunyai sekeping antara muka, kita boleh menghantarnya terus kepada fungsi tanpa sebarang isu:
<code class="go">slice := []interface{}{1, 2, 3} unpack(slice) // works unpack(slice...) // also works</code>
Walau bagaimanapun, jika kita mempunyai sekeping hirisan antara muka, percubaan untuk menghantar versi yang tidak dibungkus mengakibatkan ralat penyusunan:
<code class="go">sliceOfSlices := [][]interface{}{ []interface{}{1, 2}, []interface{}{101, 102}, } unpack(sliceOfSlices) // works unpack(sliceOfSlices...) // compiler error</code>
The mesej ralat ialah:
cannot use sliceOfSlices (type [][]interface {}) as type []interface {} in argument to unpack
Untuk memahami tingkah laku ini, kita perlu menyelidiki spesifikasi untuk menghantar argumen kepada parameter variadic dalam Go:
"Jika argumen akhir boleh diserahkan kepada jenis hirisan []T, ia mungkin dihantar tidak berubah sebagai nilai untuk parameter ...T jika hujah diikuti oleh ...."
Dalam kes ini, parameter variadic ialah ...antara muka{} dan penetapan langsung sliceOfSlices (yang jenis [][]antara muka{}) kepada args (jenis []antara muka{}) tidak sah.
Jadi, bagaimana kita boleh menghantar kandungan sliceOfSlices yang tidak dibungkus untuk membongkar()? Penyelesaiannya terletak pada mencipta kepingan baharu jenis []antara muka{}, menyalin elemen, dan kemudian menghantarnya menggunakan ....
<code class="go">var sliceOfSlices2 []interface{} for _, v := range sliceOfSlices { sliceOfSlices2 = append(sliceOfSlices2, v) } unpack(sliceOfSlices2...)</code>
Kaedah ini memastikan setiap kepingan dalam diwakili sebagai elemen dalam satu keping, menjadikannya serasi dengan ...antara muka{} parameter variadic.
Atas ialah kandungan terperinci Bagaimana untuk Membongkar Sekeping Kepingan ke dalam Fungsi Variadik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!