Heim >Backend-Entwicklung >Golang >Wie extrahiere ich den Literal-String-Wert aus dem „ast.BasicLit'-Knoten eines Go AST?

Wie extrahiere ich den Literal-String-Wert aus dem „ast.BasicLit'-Knoten eines Go AST?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 11:45:101007Durchsuche

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

So rufen Sie den String-Literalwert von Go AST ab

Beim Durchlaufen eines Go-Syntaxbaums, um Aufrufe einer bestimmten Funktion zu identifizieren, die einen String entgegennimmt Wenn Sie ein literales Argument verwenden, stoßen Sie möglicherweise auf einen ast.BasicLit-Knoten mit Kind == token.STRING. Das Wertfeld dieses Knotens enthält jedoch Go-Syntax und nicht den tatsächlichen Zeichenfolgenwert, den es darstellt.

Um den Literalwert der Zeichenfolge zu erhalten, verwenden Sie die Funktion strconv.Unquote(). Beachten Sie jedoch, dass diese Funktion nur Zeichenfolgen in Anführungszeichen setzt, die in Anführungszeichen eingeschlossen sind. Wenn die Zeichenfolge in ast.BasicLit nicht in Anführungszeichen steht, müssen Sie ihr manuell das entsprechende Anführungszeichen voranstellen.

Beispiel:

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!"
    }
}

Ausgabe :

Hello World!

Das obige ist der detaillierte Inhalt vonWie extrahiere ich den Literal-String-Wert aus dem „ast.BasicLit'-Knoten eines Go AST?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn