从 Go 字符串文字代码中检索字符串值
在 Go 语法树操作场景中,您可能需要提取字符串的值来自 ast.BasicLit 节点的文字。虽然该节点指示字符串文字类型,但其值表示为 Go 代码而不是实际的字符串值。本文解决了这一挑战。
解决方案:strconv.Unquote()
strconv.Unquote() 函数是关键来解决这一需求。它可以将表示为 Go 代码的字符串文字转换回其不带引号的值。但是,需要注意的是,strconv.Unquote() 仅取消引号 (") 括起来的字符串。因此,如果 ast.BasicLit 节点中的字符串文字缺少引号,则必须手动添加它们使用 strconv.Unquote().
示例之前用法:
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 }
重要提示:
以上是如何从 AST 节点中的 Go 字符串文字中提取字符串值?的详细内容。更多信息请关注PHP中文网其他相关文章!