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
Lepaskan: 2024-11-11 19:54:02
asal
517 orang telah melayarinya

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)
}
Salin selepas log masuk

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...)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan