Call-Funktionen mit speziellen Präfix / Suffix

8

Ich habe ein Paket namens "seeder":

%Vor%

Nun möchte ich alle Funktionen mit MyFunc-Präfix

aufrufen %Vor%

Ich möchte so etwas:

%Vor%

und diese Ausgabe:

%Vor%

EDIT1 : In diesem Beispiel ist parentKey eine Zeichenfolgenvariable, die sich in einer Schleife ändert

%Vor%

Aber GC sagte:

  

Verwendung der Paketsämaschine ohne Auswahl

    
Massoud Afrashteh 23.05.2016, 07:00
quelle

1 Antwort

9

Sie können eine Funktion nicht nach ihrem Namen abrufen, und das ist es, was Sie zu tun versuchen. Der Grund dafür ist, dass, wenn die Go-Tools erkennen können, dass eine Funktion nicht explizit bezeichnet wird (und somit nicht erreichbar ist), sie möglicherweise nicht einmal in die ausführbare Binärdatei kompiliert wird. Einzelheiten finden Sie unter Client- / Servercode aufteilen .

Mit einer Funktionsregistrierung

Sie können es nur tun, wenn Sie vor dem Aufruf eine "Funktionsregistrierung" erstellen:

%Vor%

Ausgabe (versuchen Sie es auf dem Go Playground ):

%Vor%

Manuelles "Routing"

Ähnlich wie bei der Registrierung wird der Name überprüft und manuell an die Funktion weitergeleitet, zum Beispiel:

%Vor%

Verwenden Sie es:

%Vor%

Versuchen Sie es auf dem Spielplatz .

Hinweis: Es liegt an Ihnen, ob Sie die Funktion mit ihrem Namen in der Hilfsfunktion callByName() aufrufen möchten oder ob Sie einen Funktionswert (vom Typ func() ) zurückgeben möchten. ) und es beim Anrufer angerufen haben.

Funktionen in Methoden umwandeln

Beachten Sie auch, dass Sie, wenn Ihre Funktionen tatsächlich Methoden eines bestimmten Typs wären, dies ohne Registrierung tun könnten. Mithilfe der Reflektion können Sie eine Methode mit dem Namen Value.MethodByName() abrufen. Sie können auch alle Methoden aufrufen / aufzählen, ohne deren Namen zu kennen, indem Sie Value.NumMethod() und Value.Method() (Siehe auch Type.NumMethod() und Type.Method() , wenn Sie den Namen der Methode oder ihrer Parametertypen benötigen).

So könnte es gemacht werden:

%Vor%

Die Ausgabe ist gleich. Probieren Sie es auf dem Go Playground aus.

    
icza 23.05.2016, 07:11
quelle

Tags und Links