Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan Berbilang Nilai Pulangan Apabila Melewati Fungsi Variadik dalam Go?

Bagaimana Mengendalikan Berbilang Nilai Pulangan Apabila Melewati Fungsi Variadik dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 21:56:14709semak imbas

How to Handle Multiple Return Values When Passing to Variadic Functions in Go?

Nilai Pulangan Berbilang dengan Fungsi Variadik

Andaikan anda mempunyai fungsi Go yang mengembalikan nilai integer berbilang, seperti:

func temp() (int, int) {
    return 1, 1
}

Secara intuitif, anda mungkin mahu menghantar terus hasil temp ke Printf dan mencetak kedua-duanya nilai menggunakan pemformatan rentetan:

fmt.Printf("first= %d and second = %d", temp())

Walau bagaimanapun, pendekatan ini tidak berfungsi kerana temp mengembalikan dua nilai, manakala Printf menjangkakan hanya satu.

Punca pengehadan ini terletak pada panggilan fungsi Go spesifikasi. Ia menyatakan bahawa jika fungsi mempunyai parameter ... akhir (seperti yang dilakukan oleh Printf), ia hanya boleh diberikan nilai pulangan yang selebihnya bagi fungsi lain. Ini menunjukkan bahawa fungsi lain mesti mempunyai sekurang-kurangnya satu nilai pulangan.

Menggunakan Interpolasi Rentetan

Daripada menggunakan Printf, anda boleh memanfaatkan interpolasi rentetan untuk mencapai matlamat anda:

a, b := temp()
fmt.Println("first=", a, "and second =", b)

Pemulangan Balutan Nilai

Untuk menghantar berbilang nilai pulangan kepada fungsi variadik seperti Printf, anda boleh menggunakan fungsi utiliti yang dipanggil bungkus. Ia memerlukan bilangan nilai{} antara muka sembarangan dan mengembalikan sekeping nilai antara muka{}:

func wrap(vs ...interface{}) []interface{} {
    return vs
}

Dengan utiliti ini, anda boleh menghantar nilai pulangan mana-mana fungsi yang mempunyai sekurang-kurangnya satu nilai pulangan kepada bungkus dan gunakan kepingan yang terhasil untuk memanggil Printf:

fmt.Printf("1: %v, 2: %v\n", wrap(oneInt())...)
fmt.Printf("1: %v, 2: %v\n", wrap(twoInts())...)
fmt.Printf("1: %v, 2: %v, 3: %v\n", wrap(threeStrings())...)

di mana oneInt, twoInts dan threeStrings ialah fungsi yang mengembalikan integer tunggal, tuple integer dan tuple rentetan, masing-masing.

Pendekatan ini memintas sekatan menghantar hanya satu nilai pulangan kepada fungsi variadic, membolehkan anda mencetak berbilang nilai pulangan fungsi anda seperti yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Berbilang Nilai Pulangan Apabila Melewati 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