Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi untuk Kesaksamaan dalam Go?

Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi untuk Kesaksamaan dalam Go?

Linda Hamilton
Lepaskan: 2024-12-18 09:35:11
asal
235 orang telah melayarinya

How Can I Reliably Compare Function Pointers for Equality in Go?

Mengesan Kesamaan Penunjuk untuk Fungsi dalam Go Mingguan

Secara tradisinya, membandingkan dua penunjuk fungsi bukan nol dalam Go melibatkan penggunaan operator == atau !=. Walau bagaimanapun, berikutan perubahan terkini, pendekatan ini kini mengakibatkan ralat.

Rasional Di Sebalik Perubahan

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.

Pertimbangan Prestasi

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.

Menggunakan Pakej Reflect

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.

Penyelesaian Sah

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan