Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah anda menghantar argumen fungsi variadic kepada fungsi lain dalam Go?

Bagaimanakah anda menghantar argumen fungsi variadic kepada fungsi lain dalam Go?

DDD
DDDasal
2024-11-11 19:54:02502semak imbas

How do you pass variadic function arguments to other functions in Go?

Memahami Laluan Parameter Fungsi Variadik

Konsep fungsi variadik dalam Go membolehkan fungsi menerima bilangan argumen yang berubah-ubah. Walau bagaimanapun, apabila menghantar hujah ini kepada fungsi lain, adalah penting untuk mengendalikan pengembangan parameter dengan betul.

Masalah:

Pertimbangkan fungsi Die berikut, yang berfungsi sebagai pembungkus sekitar fmt.Fprintf:

func Die(format string, args ...interface{}) {
    str := fmt.Sprintf(format, args)
    fmt.Fprintf(os.Stderr, "%v\n", str)
    os.Exit(1)
}

Apabila memanggil Die("foo"), output secara tidak dijangka memaparkan "foo%!(EXTRA []antara muka {}=[])" dan bukannya hanya "foo."

Penjelasan:

Fungsi variadik menganggap hujahnya sebagai kepingan jenis tertentu. Dalam fungsi Die, args ialah kepingan jenis []antara muka{}. Apabila dihantar ke fmt.Sprintf, ia dianggap sebagai satu hujah jenis []antara muka{}, bukan mengembangkan nilai individu.

Penyelesaian:

Untuk lulus hujah individu dengan betul, gunakan ... sintaks:

str := fmt.Sprintf(format, args...)

Ini mengembangkan kepingan args dan menghantar setiap nilai sebagai hujah yang berasingan.

Maklumat Tambahan:

Spesifikasi Go menjelaskan lagi tingkah laku ini:

"Jenis argumen fungsi variadic ialah sepotong jenis argumen individu. Memanggil fungsi variadic menyediakan penukaran tersirat daripada set memberikan nilai kepada jenis kepingan."

Dengan memahami konsep ini, anda boleh menghantar argumen variadic dengan betul kepada fungsi lain dan mengelakkan output yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimanakah anda menghantar argumen fungsi variadic kepada fungsi lain 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