Isu Pulangan Berbilang Nilai Go
Dalam Go, mengembalikan berbilang nilai daripada fungsi ialah amalan biasa, tetapi had sintaks tertentu boleh timbul . Mari kita terokai sebab coretan kod berikut berkelakuan berbeza:
Kod Sah:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
Kod Tidak Sah:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Sebab Sintaks Tidak Sah:
Coretan kod kedua cuba mengembalikan dua nilai terus daripada carian peta semua[id]. Walau bagaimanapun, Go memerlukan penugasan eksplisit berbilang nilai pulangan.
Corak "Comma Ok":
Corak "Comma Ok" ialah mekanisme untuk mengekstrak nilai dan penunjuk boolean (biasanya dinamakan ok) daripada mengakses kunci peta. Corak ini disokong untuk peta, saluran dan penegasan jenis.
Dalam kes anda, ia ialah nilai yang diperoleh semula dan hadir ialah boolean yang menunjukkan sama ada kunci itu wujud dalam peta. Tugasan dengan pemisahan koma it, present := all[id] secara tersirat menggunakan corak ini.
Memahami Kaedah Unpack:
Secara dalaman, Go menggunakan kaedah unpack untuk mengendalikan tugasan berbilang nilai. Kaedah ini menentukan sama ada tugasan ialah huruf "koma ok" berdasarkan mod operan (cth., pengindeksan peta, nilai saluran, penegasan jenis).
Secara lalai, kaedah unpack hanya membenarkan penetapan koma ok semasa melakukan tugasan dengan dua pembolehubah di sebelah kiri. Sekatan ini ditetapkan dalam kaedah Checker.initVars().
Kesimpulan:
Corak "koma ok" dalam Go membolehkan mendapatkan semula berbilang nilai daripada peta, saluran, dan jenis penegasan. Walau bagaimanapun, penetapan nilai pulangan yang eksplisit diperlukan dan pengkompil mengehadkan penetapan koma ok kepada senario di mana dua pembolehubah hadir di sebelah kiri.
Atas ialah kandungan terperinci Mengapakah Go Memerlukan Tugasan Eksplisit untuk Pulangan Berbilang Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!