Go에서 JavaScript의 `eval()` 기능을 구현하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-10 20:06:03
원래의
671명이 탐색했습니다.

How to Achieve the Functionality of JavaScript's `eval()` in Go?

Go의 JS eval()과 동일

JavaScript의 eval()과 유사한 평가가 실제로 Go에서 수행될 수 있습니다. 이는 프로그램 내에서 표현식을 실행하는 데 특히 유용합니다. 다음 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;
로그인 후 복사

res의 결과는 다음과 같습니다.

200
4
27
로그인 후 복사
로그인 후 복사

Implementation in Go

Go에서는 동등한 기능은 go/types 패키지에서 제공됩니다. Go에서 동일한 결과를 얻을 수 있는 방법은 다음과 같습니다.

types.NewPackage 및 type.Scope를 사용하여 고유한 패키지를 정의해야 합니다. 상수를 정의하려면 type.NewConst를 사용하여 적절한 유형 정보를 제공하세요.

package main

import (
    "fmt"
    "go/types"
)

func main() {
    // Create a new package and scope.
    pkg := types.NewPackage("example", "example.com/eval")
    scope := types.NewScope(pkg, types.RelativeToPkg, "")

    // Insert constants into the package's scope.
    x := types.NewConst(scope, "x", types.Int, types.NewInt64(10))
    y := types.NewConst(scope, "y", types.Int, types.NewInt64(20))

    // Define the expressions to be evaluated.
    exprA := "x * y"
    exprB := "2 + 2"
    exprC := "x + 17"

    // Evaluate the expressions.
    results := []int64{}
    for _, expr := range []string{exprA, exprB, exprC} {
        result, err := types.Eval(expr, scope)
        if err != nil {
            panic(err)
        }
        results = append(results, result.Int64())
    }

    // Print the results.
    fmt.Println("Results:")
    for _, result := range results {
        fmt.Println(result)
    }
}
로그인 후 복사

이 Go 코드를 실행하면 JavaScript 예와 동일한 결과를 얻을 수 있습니다.

200
4
27
로그인 후 복사
로그인 후 복사

위 내용은 Go에서 JavaScript의 `eval()` 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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