Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melewati Kedua-dua Argumen Slice Biasa dan Meletup dengan betul kepada Fungsi Variadik dalam Go?

Bagaimanakah Saya Boleh Melewati Kedua-dua Argumen Slice Biasa dan Meletup dengan betul kepada Fungsi Variadik dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 16:24:14328semak imbas

How Can I Correctly Pass Both Regular and Exploded Slice Arguments to a Variadic Function in 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:

  1. Enumerasi Elemen: Setiap elemen hirisan dihantar secara individu, dipisahkan dengan koma.
  2. Menggunakan Slice Sedia Ada: Seluruh kepingan, diikuti dengan ..., diluluskan sebagai satu hujah.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn