Heim >Backend-Entwicklung >Golang >Wie kann ich in Go Funktionen als Argumente übergeben?

Wie kann ich in Go Funktionen als Argumente übergeben?

Susan Sarandon
Susan SarandonOriginal
2024-12-04 12:12:26272Durchsuche

How Can I Pass Functions as Arguments in Go?

Übergabe von Funktionen als Argumente: Ein Metaprogrammierungsansatz in Golang

Wie wir wissen, sind Golang-Funktionen erstklassige Werte, sodass keine Notwendigkeit besteht Metaprogrammierungstricks, die in dynamischen Sprachen üblich sind. Um eine Funktion als Argument an eine andere Funktion zu übergeben, können wir einfach Golangs inhärente Unterstützung für Funktionswerte nutzen. Hier ist ein Beispiel:

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

Das Ausführen dieses Programms erzeugt die folgende Ausgabe:

123
99

Betrachten wir nun ein Szenario, in dem die Auswahl der Funktion von einer Laufzeit abhängt. nur bekannter Wert. Um dies zu bewältigen, können wir eine Karte erstellen, die Funktionsnamen mit ihren jeweiligen Funktionszeigern verknüpft:

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

...

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

Auf diese Weise können wir eine Funktion als Argument anhand ihres Namens übergeben und die gewünschte Funktion dynamisch auswählen Laufzeit.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go Funktionen als Argumente übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn