Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melewati Kedua-dua Argumen Slice Biasa dan Meletup dengan betul kepada Fungsi Variadik dalam Go?
Argumen Fungsi Variadik: Mencampurkan Kepingan "Meletup" dan Parameter Biasa dalam Go
Bahasa pengaturcaraan Go menyediakan keupayaan untuk menentukan fungsi dengan variadik parameter menggunakan sintaks "...". Ini membolehkan fungsi menerima bilangan argumen yang berubah-ubah. Walau bagaimanapun, memahami mekanik hujah variadic adalah penting untuk mengelakkan ralat masa jalan.
Dalam contoh yang diberikan:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) } func foo(s ...string) { fmt.Println(s) }
niatnya adalah untuk meluluskan kedua-dua hujah biasa ("bar") dan hirisan "meletup" (barang...) ke fungsi foo. Walau bagaimanapun, ini membawa kepada ralat penyusunan disebabkan oleh "terlalu banyak hujah."
Sebab bagi tingkah laku ini terletak pada takrifan parameter variadic. Dalam Go, terdapat dua cara berbeza untuk menentukan argumen bagi parameter variadik:
Ia tidak dibenarkan untuk mencampurkan kedua-dua kaedah ini dalam parameter variadic yang sama. Apabila bahan... diluluskan, kepingan itu sendiri menjadi nilai parameter variadic. Oleh itu, ia tidak boleh wujud bersama mana-mana elemen terhitung seperti "bar."
Jika tingkah laku yang dimaksudkan adalah untuk "meletupkan" hirisan, sintaks berikut adalah betul:
foo([]string{"bar"}...)
Ini akan berkembang secara berkesan kepada:
foo("bar", "baz", "bla")
Kesimpulannya, mencampurkan hujah terhitung dengan sekeping dalam konteks fungsi variadik adalah tidak mungkin. dalam Go. Spesifikasi bahasa memberi mandat bahawa parameter variadic hanya boleh menerima hujah keping tunggal, yang menjadi nilai parameter tersebut. Untuk mencapai gelagat "meletup" yang diingini, keseluruhan hirisan mesti dihantar sendiri, tanpa sebarang hujah yang disebutkan sebelumnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Kedua-dua Argumen Slice Biasa dan Meletup dengan betul kepada Fungsi Variadik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!