Comment récupérer la valeur littérale d'une chaîne à partir de Go AST
Lors de la traversée d'un arbre syntaxique Go pour identifier les appels à une fonction spécifique qui prend une chaîne argument littéral, vous pouvez rencontrer un nœud ast.BasicLit avec Kind == token.STRING. Cependant, le champ de valeur de ce nœud contient la syntaxe Go plutôt que la valeur de chaîne réelle qu'il représente.
Pour obtenir la valeur littérale de la chaîne, utilisez la fonction strconv.Unquote(). Cependant, notez que cette fonction supprime uniquement les chaînes placées entre guillemets. Si la chaîne dans ast.BasicLit n'est pas entre guillemets, vous devez la pré-ajouter manuellement avec le caractère de guillemet approprié.
Exemple :
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!" } }
Sortie :
Hello World!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!