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!