>백엔드 개발 >Golang >Go AST의 `ast.BasicLit` 노드에서 리터럴 문자열 값을 추출하는 방법은 무엇입니까?

Go AST의 `ast.BasicLit` 노드에서 리터럴 문자열 값을 추출하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 11:45:101007검색

How to Extract the Literal String Value from a Go AST's `ast.BasicLit` Node?

Go AST에서 문자열 리터럴 값을 검색하는 방법

Go 구문 트리를 순회하여 문자열을 사용하는 특정 함수에 대한 호출을 식별할 때 리터럴 인수를 사용하면 Kind == token.STRING인 ast.BasicLit 노드를 만날 수 있습니다. 그러나 이 노드의 값 필드에는 그것이 나타내는 실제 문자열 값이 아닌 Go 구문이 포함되어 있습니다.

문자열의 리터럴 값을 얻으려면 strconv.Unquote() 함수를 사용하십시오. 그러나 이 함수는 따옴표로 묶인 문자열만 따옴표를 해제합니다. ast.BasicLit의 문자열이 인용되지 않은 경우 적절한 인용 문자를 수동으로 앞에 붙여야 합니다.

예:

package main

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
    "strconv"
)

func main() {
    fset := token.NewFileSet()
    node, _ := parser.ParseExpr(`` + "Hello World!" + `"`)

    switch node := node.(type) {
    case *ast.BasicLit:
        fmt.Println(strconv.Unquote(node.Value)) // Prints "Hello World!"
    }
}

출력 :

Hello World!

위 내용은 Go AST의 `ast.BasicLit` 노드에서 리터럴 문자열 값을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.