> 백엔드 개발 > Golang > 동적 코드 평가를 위한 JavaScript의 eval() 함수에 해당하는 Go가 있습니까?

동적 코드 평가를 위한 JavaScript의 eval() 함수에 해당하는 Go가 있습니까?

DDD
풀어 주다: 2024-11-13 03:30:02
원래의
767명이 탐색했습니다.

Is there a Go equivalent to JavaScript's eval() function for dynamic code evaluation?

Golang 코드/표현식 평가/실행 JavaScript의 eval()과 같습니다.

JavaScript의 eval() 메소드를 사용하면 코드/ 동적으로 표현합니다. 이는 Go에 유사한 기능이 존재하는지에 대한 의문을 제기합니다.

해결책

예, 다음을 사용하여 Go 코드/표현식, 특히 표현식을 평가하고 실행할 수 있습니다. Go 표준 라이브러리의 eval.go 패키지.

이를 달성하려면 다음 워크플로가 필요합니다.

  1. 패키지 만들기: 이는 코드를 나타냅니다. 식이 평가될 컨텍스트.
  2. 범위 만들기: 이는 패키지 내의 변수 범위를 나타냅니다.
  3. 상수 삽입: 삽입 표현식에 사용된 변수를 패키지 범위의 상수로 사용합니다.
  4. 표현식 평가: 표현식을 평가하려면 eval.go 패키지의 Eval 함수를 사용합니다.

제공된 JavaScript 코드를 고려하세요.

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;
로그인 후 복사

다음 Go 코드는 이러한 표현식을 평가하는 방법을 보여줍니다.

import (
    "fmt"
    "go/types"
)

func main() {
    // Create a package
    pkg := types.NewPackage("main", "go.example.org/eval")

    // Create a scope
    scope := types.NewScope(pkg, types.Universe)

    // Insert constants
    scope.Insert(types.NewConst(types.NewVar(scope, "x", types.Int), types.Typ[types.Int], 10))
    scope.Insert(types.NewConst(types.NewVar(scope, "y", types.Int), types.Typ[types.Int], 20))

    // Evaluate expressions
    res := evalExpression(scope, pkg)
    fmt.Println(res) // 200\n4\n27
}

func evalExpression(scope *types.Scope, pkg *types.Package) string {
    expr, _ := types.ParseExpr("x * y + \"\n\"")
    result, _ := eval.Eval(expr, pkg, scope)
    return result.String()
}
로그인 후 복사

위 내용은 동적 코드 평가를 위한 JavaScript의 eval() 함수에 해당하는 Go가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿