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
Lepaskan: 2024-12-05 17:05:12
asal
416 orang telah melayarinya

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

Output:

123
99
Salin selepas log masuk

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan