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
Susan Sarandonasal
2024-12-04 12:12:26273semak imbas

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))
}

Menjalankan program ini akan menghasilkan output berikut:

123
99

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])

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!

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