Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi untuk Kesaksamaan dalam Go?
Secara tradisinya, membandingkan dua penunjuk fungsi bukan nol dalam Go melibatkan penggunaan operator == atau !=. Walau bagaimanapun, berikutan perubahan terkini, pendekatan ini kini mengakibatkan ralat.
Penghapusan perbandingan kesamaan penunjuk untuk fungsi berpunca daripada konsep kesamaan lwn identiti. Dalam Go, == dan != pengendali menilai kesetaraan untuk nilai, bukan identiti. Perbezaan ini bertujuan untuk mengelakkan kekeliruan antara konsep ini.
Selain itu, perbandingan fungsi memberi kesan kepada prestasi. Sebagai contoh, penutupan tanpa nama yang tidak merujuk kepada pembolehubah luaran harus dioptimumkan ke dalam satu pelaksanaan oleh pengkompil. Membandingkan penunjuk fungsi akan menghalang pengoptimuman ini, yang memerlukan penciptaan dinamik penutupan baharu pada masa jalan.
Walaupun mungkin untuk menentukan identiti fungsi menggunakan pakej reflect, adalah penting untuk ambil perhatian bahawa pendekatan ini memerlukan tingkah laku yang tidak ditentukan. Keputusan perbandingan sedemikian tidak boleh dipercayai, kerana pengkompil mungkin memutuskan untuk meruntuhkan berbilang fungsi menjadi satu pelaksanaan.
Untuk membandingkan penunjuk fungsi dengan berkesan, pendekatan berikut boleh digunakan:
package main import "fmt" func F1() {} func F2() {} var F1_ID = F1 // Assign a unique variable to F1 var F2_ID = F2 // Assign a unique variable to F2 func main() { f1 := &F1_ID // Take the address of F1_ID f2 := &F2_ID // Take the address of F2_ID // Compare pointers fmt.Println(f1 == f1) // Prints true fmt.Println(f1 == f2) // Prints false }
Dengan menggunakan penunjuk kepada pembolehubah unik yang dikaitkan dengan setiap fungsi, anda boleh mengesan kesamaan penunjuk secara berkesan antara fungsi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi untuk Kesaksamaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!