Apabila cuba mengembalikan berbilang nilai dalam Go, nampaknya mengelirukan mengapa sintaks tertentu sah manakala yang lain tidak. Untuk menggambarkan ini, pertimbangkan dua coretan kod berikut:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
Coretan kod pertama adalah sah dan mengembalikan kedua-dua nilai Info dan bool. Walau bagaimanapun, coretan kedua adalah tidak sah:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Ini menimbulkan persoalan mengapa coretan pertama sah dan yang kedua tidak. Selain itu, seseorang mungkin tertanya-tanya sama ada terdapat cara untuk mengelak daripada menggunakan pembolehubah sementara seperti itu dan hadir.
Kunci untuk memahami tingkah laku ini terletak pada "koma ok" corak. Dalam Go, apabila mengakses peta, hasilnya ialah sepasang nilai: nilai yang dikaitkan dengan kunci dan boolean yang menunjukkan sama ada kunci itu wujud dalam peta. Ini selalunya digunakan untuk membezakan antara kunci yang hilang dan nilai sifar.
Dalam coretan kod pertama, ungkapan all[id] mengembalikan sepasang nilai, yang diperuntukkan kepadanya dan hadir. Penyata pemulangan kemudiannya mengembalikan nilai ini.
Pengkompil memainkan peranan dalam menentukan sama ada tugasan berbilang nilai adalah sah. Jika fungsi mengembalikan berbilang nilai tetapi penerima di sebelah kiri hanya mempunyai satu pembolehubah, pengkompil akan mengeluarkan ralat. Ini kerana pengkompil menjangkakan bilangan nilai yang dikembalikan sepadan dengan bilangan pembolehubah yang menerimanya.
Dalam kes coretan kod kedua, ungkapan return all[id] hanya mengembalikan satu nilai, yang tidak serasi dengan dua pembolehubah di sebelah kiri. Oleh itu, pengkompil melaporkan ralat.
Malangnya, tiada cara untuk mengelak daripada menggunakan pembolehubah sementara apabila mengembalikan berbilang nilai dalam fungsi Go. Ini kerana pengkompil memerlukan bilangan nilai yang dikembalikan untuk memadankan bilangan pembolehubah yang menerimanya. Walau bagaimanapun, adalah mungkin untuk meminimumkan penggunaan pembolehubah sementara dengan menggunakan nilai pulangan yang dinamakan atau mengembalikan struct.
Atas ialah kandungan terperinci Mengapa Fungsi Go Tidak Dapat Mengembalikan Berbilang Nilai Secara Terus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!