Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menggunakan Nama Fungsi Rentetan untuk Memanggil Fungsi Secara Dinamik dalam Go?

Bagaimanakah Saya Boleh Menggunakan Nama Fungsi Rentetan untuk Memanggil Fungsi Secara Dinamik dalam Go?

DDD
DDDasal
2024-12-05 17:05:12404semak imbas

How Can I Use String Function Names to Call Functions Dynamically in Go?

Menggunakan Penunjuk Fungsi dengan Nama Fungsi Rentetan dalam Go

Dalam Go, adalah mungkin untuk mendapatkan kembali penuding fungsi daripada nama fungsi yang disediakan sebagai rentetan. Keupayaan ini berharga dalam senario pengaturcaraan meta, seperti menggunakan fungsi secara dinamik berdasarkan parameter rentetan.

Tidak seperti sesetengah bahasa dinamik, fungsi Go ialah nilai kelas pertama. Oleh itu, anda boleh terus menghantar fungsi sebagai hujah kepada fungsi lain. Pertimbangkan contoh berikut:

package main

import "fmt"

func someFunction1(a, b int) int { return a + b }
func someFunction2(a, b int) int { return a - b }

func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) }

func main() {
    fmt.Println(someOtherFunction(111, 12, someFunction1))
    fmt.Println(someOtherFunction(111, 12, someFunction2))
}

Output:

123
99

Dalam contoh ini, someOtherFunction mengambil dua hujah integer dan penunjuk fungsi (parameter f). Ia kemudian memanggil fungsi yang disediakan dengan hujah yang diberikan. Hasilnya dicetak.

Jika pemilihan fungsi bergantung pada nilai yang diketahui hanya pada masa jalan, anda boleh menggunakan peta:

m := map[string]func(int, int) int{
    "someFunction1": someFunction1,
    "someFunction2": someFunction2,
}

...

z := someOtherFunction(x, y, m[key])

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Nama Fungsi Rentetan untuk Memanggil Fungsi Secara Dinamik 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