Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Meluluskan Fungsi sebagai Hujah dalam Go?

Bagaimanakah Saya Boleh Meluluskan Fungsi sebagai Hujah dalam Go?

Susan Sarandon
Lepaskan: 2024-12-04 12:12:26
asal
278 orang telah melayarinya

How Can I Pass Functions as Arguments in Go?

Melalui Fungsi sebagai Argumen: Pendekatan Metaprogramming di Golang

Seperti yang kita ketahui, fungsi Golang adalah nilai kelas pertama, menghapuskan keperluan untuk helah metaprogramming biasa dalam bahasa dinamik. Untuk menghantar fungsi sebagai hujah kepada fungsi lain, kita hanya boleh menggunakan sokongan sedia ada Golang untuk nilai fungsi. Berikut ialah contoh:

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

Menjalankan program ini akan menghasilkan output berikut:

123
99
Salin selepas log masuk

Sekarang, mari kita pertimbangkan senario di mana pemilihan fungsi bergantung pada masa jalan- hanya nilai yang diketahui. Untuk mengendalikan perkara ini, kita boleh mencipta peta yang mengaitkan nama fungsi dengan penunjuk fungsi masing-masing:

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

...

z := someOtherFunction(x, y, m[key])
Salin selepas log masuk

Dengan cara ini, kita boleh menghantar fungsi sebagai hujah dengan namanya, memilih fungsi yang dikehendaki secara dinamik di masa jalan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meluluskan Fungsi sebagai Hujah 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