Maison >développement back-end >Golang >Comment extraire la valeur de chaîne d'un littéral de chaîne Go dans un nœud AST ?

Comment extraire la valeur de chaîne d'un littéral de chaîne Go dans un nœud AST ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 16:51:11751parcourir

How to Extract the String Value from a Go String Literal in an AST Node?

Récupération de la valeur de chaîne à partir du code littéral de chaîne Go

Dans un scénario de manipulation d'arbre de syntaxe Go, vous devrez peut-être extraire la valeur d'une chaîne littéral à partir d’un nœud ast.BasicLit. Bien que ce nœud indique le type littéral de chaîne, sa valeur est représentée sous forme de code Go au lieu de la valeur réelle de la chaîne. Cet article aborde la solution à ce défi.

Solution : strconv.Unquote()

La fonction strconv.Unquote() est la clé pour répondre à ce besoin. Il permet la conversion d'une chaîne littérale représentée sous forme de code Go en sa valeur non citée. Cependant, il est crucial de noter que strconv.Unquote() supprime uniquement les chaînes entre guillemets ("). Ainsi, si la chaîne littérale dans votre nœud ast.BasicLit manque de guillemets, vous devez les ajouter manuellement. avant d'utiliser strconv.Unquote().

Exemple Utilisation :

import (
    "fmt"
    "strconv"
)

func main() {
    // String literal without quotation marks (will fail)
    str1 := "Hello"

    // String literal with quotation marks (valid)
    str2 := `"Hello world"`

    // Manually adding quotation marks to the first string
    str1 = strconv.Quote(str1)

    // Unquoting the string literals
    unqStr1, _ := strconv.Unquote(str1)
    unqStr2, _ := strconv.Unquote(str2)

    fmt.Println(unqStr1) // Output: Hello
    fmt.Println(unqStr2) // Output: Hello world
}

Remarques importantes :

  • strconv.Unquote() annule uniquement les chaînes entre guillemets.
  • Si la chaîne littérale contient des caractères spéciaux (par exemple, des sauts de ligne), strconv.Quote() doit être utilisé avant strconv.Unquote() pour une manipulation correcte.
  • Les valeurs de retour _ dans l'exemple sont ignorées par souci de concision ; de manière appropriée dans des cas d'utilisation pratiques.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn