Membongkar Sekeping Kepingan untuk Fungsi Variadik
Dalam Go, apabila berurusan dengan sekeping hirisan dan fungsi variadik, penjagaan mesti diambil apabila menyampaikan kepingan sebagai hujah yang tidak dibungkus. Tidak seperti hirisan antara muka, hirisan hirisan tidak boleh dihantar terus sebagai hujah yang tidak dibungkus kepada fungsi variadik yang mengharapkan sekeping antara muka.
Memahami Isu
Punca punca isunya terletak pada sistem jenis Go. Parameter terakhir fungsi variadic dianggap sekeping jenis yang ditentukan. Walau bagaimanapun, apabila menghantar sekeping hirisan, pengkompil menjangkakan sekeping jenis elemen asas, bukan sekeping hirisan. Oleh itu, ralat tidak padan jenis timbul apabila cuba membongkar hirisan hirisan secara langsung.
Menyelesaikan Isu
Untuk menyelesaikan isu, langkah perantaraan diperlukan: mencipta kepingan baharu jenis unsur asas dan menyalin unsur daripada kepingan kepingan ke dalamnya. Potongan baharu ini kemudiannya boleh dihantar sebagai hujah yang tidak dibungkus kepada fungsi variadic.
<code class="go">var sliceOfSlices [][]interface{} // Create a new slice to hold the unpacked elements var newSlice []interface{} for _, slice := range sliceOfSlices { newSlice = append(newSlice, slice...) } unpack(newSlice...) // Now it works</code>
Memahami Gelagat
Apabila anda menghantar kepingan yang tidak dibungkus ke fungsi variadic, setiap elemen hirisan diluluskan sebagai hujah yang berasingan. Ini tidak berlaku apabila anda menghantar hirisan itu sendiri, kerana ia dibalut dalam nilai antara muka{} dan diluluskan sebagai satu hujah.
Untuk menunjukkan ini, pertimbangkan coretan kod berikut:
<code class="go">func unpack(args ...interface{}) { fmt.Println("Number of arguments:", len(args)) } slice := []interface{}{1, 2, 3} unpack(slice) // Prints: 1 unpack(slice...) // Prints: 3</code>
Output menunjukkan bahawa penghantaran terus hirisan (tanpa membongkar) menghasilkan satu hujah, manakala membongkar menghasilkan tiga hujah yang berasingan.
Kesimpulan
Membongkar sekeping hirisan untuk fungsi variadik memerlukan langkah perantaraan untuk menyalin unsur hirisan ke dalam hirisan baharu jenis unsur asas. Ini mengelakkan ralat tidak padan jenis dan membenarkan elemen dihantar sebagai argumen berasingan kepada fungsi.
Atas ialah kandungan terperinci Bagaimana untuk Membongkar Sekeping Kepingan untuk Fungsi Variadik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!