Melalui Berbilang Nilai Pulangan kepada Fungsi Variadik dalam Go
Soalan:
Bolehkah berfungsi mengembalikan berbilang nilai integer dihantar terus ke fmt.Println() untuk output rentetan yang diformatkan, serupa dengan Python?
func temp() (int, int) { return 1, 1 } fmt.Println("first= %d and second = %d", temp()) // Not supported
Jawapan:
Tidak, ini tidak disokong secara langsung secara lalai dalam Go. Menurut spesifikasi bahasa, "Panggilan" mengharapkan panggilan fungsi sebagai hujah tunggal untuk parameter variadik seperti ...antara muka{} dan fungsi mesti mempunyai sekurang-kurangnya satu nilai pulangan.
fmt.Printf(), walau bagaimanapun, membenarkan rentetan format bersama parameter variadik, menjadikannya lebih sesuai untuk tugas ini. Walau bagaimanapun, memandangkan temp() mengembalikan tupel, ia tidak boleh dihantar terus sebagai argumen ...antara muka{}.
Penyelesaian:
Untuk menghantar berbilang nilai pulangan ke dalam fungsi variadic, fungsi pembalut utiliti boleh digunakan untuk menukar tuple menjadi kepingan []antara muka{}, yang kemudiannya boleh dihantar sebagai hujah variadic. Di bawah ialah contoh pelaksanaan:
func wrap(vs ...interface{}) []interface{} { return vs }
Menggunakan fungsi pembalut ini, fungsi temp() kini boleh dihantar ke fmt.Printf():
func main() { fmt.Printf("first= %v and second = %v", wrap(temp()...)...) }
Ini akan mencetak dengan betul nilai temp().
Atas ialah kandungan terperinci Bolehkah `fmt.Println` Go Mengendalikan Berbilang Nilai Pulangan daripada Fungsi Secara Terus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!