Heim >Backend-Entwicklung >Golang >Wie rufe ich Go-Funktionen mithilfe von Zeichenfolgennamen dynamisch auf?

Wie rufe ich Go-Funktionen mithilfe von Zeichenfolgennamen dynamisch auf?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 20:41:14781Durchsuche

How to Dynamically Invoke Go Functions Using String Names?

Funktionen dynamisch mithilfe von String-Namen in Go aufrufen

Funktionen nehmen in Go eine erstklassige Stellung ein, sodass keine umständlichen Techniken eingesetzt werden müssen in dynamischen Sprachen. Dadurch können Funktionen als Parameter an andere Funktionen übergeben werden, wodurch Metaprogrammierungsfunktionen effektiv aktiviert werden.

Angenommen, Sie möchten eine Funktion als Argument an eine andere Funktion übergeben. Hier ist der Code, den Sie verwenden können, um dies zu erreichen:

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 Codes erzeugt die folgende Ausgabe:

123
99

Außerdem, wenn die Funktionsauswahl durch eine Nur-Laufzeit-Funktion beeinflusst wird Wenn der Wert bekannt ist, kann eine Karte verwendet werden:

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

...

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

Das obige ist der detaillierte Inhalt vonWie rufe ich Go-Funktionen mithilfe von Zeichenfolgennamen dynamisch auf?. 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