Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membandingkan Fungsi dalam Go?

Bagaimana untuk Membandingkan Fungsi dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 17:58:03759semak imbas

How to Compare Functions in Go?

Cara Membandingkan Fungsi dalam Go

Pengenalan

Dalam Go, fungsi boleh dirujuk oleh pembolehubah dan diluluskan sebagai hujah kepada fungsi lain. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa fungsi dalam Go tidak boleh dibandingkan secara langsung. Ini bermakna anda tidak boleh menggunakan operator perbandingan standard (==, !=, dsb.) untuk menentukan sama ada dua fungsi adalah sama.

Kaedah Perbandingan Betul

The satu-satunya cara untuk membandingkan dua fungsi dengan tepat ialah membandingkan alamat mereka. Ini kerana alamat fungsi mengenal pasti ia secara unik. Untuk mendapatkan alamat fungsi, anda boleh menggunakan sama ada:

  • fmt.Sprintf(): Kaedah ini mencetak alamat fungsi kepada rentetan dan menyimpannya dalam pembolehubah.
  • reflect.Value.Pointer(): Kaedah ini mengembalikan alamat mentah bagi nilai fungsi.

Contoh

Pertimbangkan kod Go berikut:

<code class="go">type Action func(foo string)

var Undefined Action = func(foo string) {}
var Defined Action = func(foo string) {}

func compareFunctions() {
    if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Undefined) {
        fmt.Println("Undefined and Undefined are equal")
    } else {
        fmt.Println("Undefined and Undefined are not equal")
    }

    if fmt.Sprintf("%v", Defined) == fmt.Sprintf("%v", Defined) {
        fmt.Println("Defined and Defined are equal")
    } else {
        fmt.Println("Defined and Defined are not equal")
    }

    if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Defined) {
        fmt.Println("Undefined and Defined are equal")
    } else {
        fmt.Println("Undefined and Defined are not equal")
    }
}</code>

Apabila anda menjalankan kod ini, ia menghasilkan output berikut:

Undefined and Undefined are equal
Defined and Defined are equal
Undefined and Defined are not equal

Output ini menunjukkan bahawa fungsi boleh dibandingkan menggunakan alamatnya dan dua fungsi dengan alamat yang berbeza adalah tidak sama.

Kesimpulan

Walaupun nilai fungsi dalam Go tidak boleh dibandingkan secara langsung, adalah mungkin untuk membandingkan alamat mereka untuk menentukan sama ada mereka adalah fungsi yang sama. Menggunakan kaedah yang diterangkan di atas, anda boleh mengenal pasti dengan tepat sama ada dua fungsi adalah sama dalam Go.

Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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