Dalam Go, nilai fungsi tidak boleh dibandingkan. Walau bagaimanapun, adalah mungkin untuk membandingkan alamat nilai fungsi, yang boleh berguna dalam senario tertentu.
Mengikut spesifikasi Go, "Nilai fungsi tidak boleh dibandingkan. " Ini bermakna anda tidak boleh membandingkan secara langsung dua nilai fungsi menggunakan operator perbandingan seperti == atau !=.
Untuk membandingkan alamat nilai fungsi, anda boleh menggunakan fmt Fungsi .Sprintf() untuk mendapatkan alamat fungsi. Pembolehubah p1 dan p2 dalam kod di bawah mengandungi alamat fungsi Undefined dan hand.Get.
<code class="go">p1 := fmt.Sprintf("%v", Undefined) p2 := fmt.Sprintf("%v", hand.Get)</code>
Anda kemudian boleh menggunakan operator == untuk membandingkan alamat nilai fungsi:
<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
Walaupun secara teknikalnya mungkin untuk membandingkan alamat nilai fungsi, ini secara amnya bukan amalan yang baik. Nilai fungsi boleh berubah sepanjang hayat program, yang boleh menjadikan perbandingan alamat tidak boleh dipercayai.
Daripada membandingkan alamat nilai fungsi, lebih baik anda memfaktorkan semula kod anda untuk mengelakkan keperluan untuk perbandingan sedemikian. Contohnya, anda boleh mencipta peta nilai fungsi dan membandingkan kekunci untuk menentukan fungsi yang sedang digunakan.
Pilihan lain untuk membandingkan nilai fungsi ialah menggunakan pantulan. Kaedah reflect.Value.Pointer() membolehkan anda mendapatkan alamat nilai fungsi. Walau bagaimanapun, pendekatan ini juga tidak disyorkan kerana ia lebih kompleks dan terdedah kepada ralat daripada teknik perbandingan alamat yang diterangkan di atas.
Atas ialah kandungan terperinci Bolehkah Anda Bandingkan Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!