Heim >Backend-Entwicklung >Golang >Wie kann ich zur Laufzeit eine Go-Funktion mithilfe ihres Namens (String) aufrufen?

Wie kann ich zur Laufzeit eine Go-Funktion mithilfe ihres Namens (String) aufrufen?

DDD
DDDOriginal
2024-12-04 18:45:14240Durchsuche

How Can I Call a Go Function Using Its Name (String) at Runtime?

Zeiger auf Funktion von String in Go

Metaprogrammierung oder die Fähigkeit, Code selbst zur Laufzeit zu manipulieren, ist eine leistungsstarke Technik in der Programmierung. Ein Aspekt, der in Go auftreten kann, ist die Notwendigkeit, auf einen Zeiger auf eine Funktion basierend auf ihrem Namen zuzugreifen, der als String bereitgestellt wird.

Lösung

Im Gegensatz dazu In dynamischen Sprachen gelten Go-Funktionen als erstklassige Werte. Dies bedeutet, dass Funktionen als Argumente an andere Funktionen übergeben werden können, wodurch komplexe Metaprogrammierungstechniken überflüssig werden.

Um dies zu demonstrieren, betrachten Sie den folgenden Codeausschnitt:

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

Ausführung

Wenn dieser Code ausgeführt wird, wird Folgendes erzeugt Ausgabe:

123
99

Dies zeigt, wie Funktionen basierend auf ihren Namen als Argumente an someOtherFunction übergeben werden können.

Benutzerdefinierte Funktionsauswahl

If Die Auswahl der Funktion hängt von einem Wert ab, der nur zur Laufzeit bekannt ist. Sie können eine Zuordnung verwenden, um Funktionsnamen mit der entsprechenden Funktion zu verknüpfen Hinweise:

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

...

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

Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit eine Go-Funktion mithilfe ihres Namens (String) aufrufen?. 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