Unquoting Go String Literals from Syntax Tree
When traversing a Go syntax tree, it may be necessary to extract the actual value of a string literal represented as an ast.BasicLit node with Kind set to token.STRING. However, this node initially contains the Go code representing the string, not its literal value.
Solution:
To transform the Go string literal code to its actual value, use the strconv.Unquote() function. This function removes the quotes from a quoted string, enabling you to obtain the raw string value.
Note:
strconv.Unquote() can only unquote strings enclosed in quotes (either single or double). If the string literal is not enclosed in quotes, you need to manually add them before using the function.
Example:
import ( "fmt" "strconv" ) func main() { // Given a quoted string quotedString := "`Hi`" // Unquote it unquotedString, err := strconv.Unquote(quotedString) if err != nil { fmt.Println("Error:", err) } else { fmt.Println(unquotedString) // Prints "Hi" } // Given an unquoted string unquotedString2 := "Hi" // Add quotes and unquote it quotedString2 := strconv.Quote(unquotedString2) unquotedString2, err = strconv.Unquote(quotedString2) if err != nil { fmt.Println("Error:", err) } else { fmt.Println(unquotedString2) // Also prints "Hi" } }
The above is the detailed content of How to Unquote Go String Literals from an AST?. For more information, please follow other related articles on the PHP Chinese website!