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

Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi dengan Selamat untuk Identiti dalam Go?

Linda Hamilton
Lepaskan: 2024-12-26 17:55:09
asal
697 orang telah melayarinya

How Can I Safely Compare Function Pointers for Identity in Go?

Kesamaan Penunjuk Fungsi dalam Go

Dalam Go, membandingkan penunjuk fungsi untuk kesamaan menggunakan operator == atau != tidak dibenarkan untuk fungsi yang tidak nihil. Tingkah laku ini menghalang percampuran kesamaan dan perbandingan identiti.

Kesamaan fungsi berbeza daripada identiti fungsi. Perbandingan identiti harus digunakan untuk menentukan sama ada dua fungsi adalah fungsi yang sama, manakala perbandingan kesamaan harus digunakan untuk menentukan sama ada dua fungsi adalah setara.

Menggunakan pakej reflect untuk membandingkan identiti fungsi, seperti yang ditunjukkan dalam contoh Atom , dianggap tingkah laku yang tidak ditentukan. Pengkompil mungkin mengoptimumkan fungsi dengan menggabungkan pelaksanaannya, menjadikan perbandingan tidak boleh dipercayai.

Untuk membandingkan penunjuk fungsi untuk identiti dengan betul, anda boleh mencipta pembolehubah unik untuk setiap fungsi dan kemudian membandingkan alamat pembolehubah tersebut. Pendekatan ini memastikan anda membandingkan penunjuk fungsi untuk fungsi yang sama, tanpa mengira pengoptimuman.

Berikut ialah contoh cara membandingkan penunjuk fungsi untuk identiti:

package main

import "fmt"

func F1() {}
func F2() {}

var F1_ID = F1  // Create a *unique* variable for F1
var F2_ID = F2  // Create a *unique* variable for 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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Penunjuk Fungsi dengan Selamat untuk Identiti 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