Bewerten/Execute Golang code/Ausdrücke wie js' eval()
Gibt es eine eval () - Methode wie auf golang?
Bewerten/JavaScript-code Ausführen/Ausdrücke:
var x = 10;
var y = 20;
var a = eval("x * y") + "<br>";
var b = eval("2 + 2") + "<br>";
var c = eval("x + 17") + "<br>";
var res = a + b + c;
Das Ergebnis des res werden:
200
4
27
Ist das möglich in golang? und warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, weil golang ist nicht diese Art von Sprache. Es ist beabsichtigt, kompiliert, nicht interpretiert, so dass die Laufzeitumgebung enthält keine "string to code" - Transformator, oder tatsächlich weiß, was eine syntaktisch korrekte Programm aussieht.
Beachten Sie, dass im Gehen, wie in den meisten anderen Programmiersprachen, Sie können schreiben Sie Ihre eigenen Dolmetscher, das heißt, eine Funktion, die einen string bewirkt, dass Berechnungen durchgeführt werden, entsprechend. Die Auswahl der Designer ist nur dann nicht zu zwingen, ein feature von so zweifelhafter Interesse und Sicherheit auf jeder, der Brauch es nicht.
Seine perfekt möglich. Zumindest für Ausdrücke, die scheint zu sein, was Sie wollen:
Haben Sie einen Blick auf:
https://golang.org/src/go/types/eval.go
https://golang.org/src/go/constant/value.go
https://golang.org/pkg/go/types/#Scope
Würden Sie brauchen, um Ihre eigenen erstellen
Package
undScope
Objekte undInsert
Konstanten im Paket-Umfang. Konstanten sind-erstellt mittypes.NewConst
durch die Bereitstellung geeigneter Informationen.Gibt es keine eingebaute eval. Aber es ist möglich zu implementieren evaluation, die Folgen werden die meisten GoLang spec: eval (nur Ausdruck, nicht ein code) - Paket auf github /auf godoc.
Beispiel:
Es ist auch möglich Variablen in den ausgewerteten Ausdruck, aber es erfordert, geben Sie Sie mit Ihren Namen an die Eval-Methode.
haben Sie einen Blick auf Github-Projekt:
https://github.com/novalagung/golpal
Es ermöglicht die Durchführung komplexer GO-Lang-code-Fragmente, sondern braucht eine 'temp' - Ordner.
Diese analysieren Beispiel analysiert, die GEHEN code zur Laufzeit: