Go - 是否可以将原始字符串文字转换为解释的字符串文字?

Go - Is it possible to convert a raw string literal to an interpreted string literal?

是否可以在 Go 中将原始字符串文字转换为解释字符串文字? (参见 language specification

我有一个原始字符串文字,但我想在控制台上打印出使用解释字符串文字会得到的结果——即使用转义序列格式化的文本输出。

例如,打印这个原始字符串字面值会得到

s := `3[1mString in bold.3[0m`
println(s) // 3[1mString in bold.3[0m

但我想要与

相同的结果
s := "3[1mString in bold.3[0m"
println(s) // String in bold. (In bold)

对于上下文,我正在尝试使用

打印使用转义序列格式化的文本文件的内容
f, _ := := ioutil.ReadFile("file.txt")
println(string(f))

但输出是前一种方式

使用strconv.Unquote():

s := `3[1mString in bold.3[0m`

s2, err := strconv.Unquote(`"` + s + `"`)
if err != nil {
    panic(err)
}
fmt.Println("normal", s2)

这将输出:

normal String in bold.

请注意,传递给 strconv.Unquote()string 值必须包含换行双引号或反引号,并且由于源 s 不包含换行引号,我在前面加上后缀像这样的人:

`"` + s + `"`

查看相关问题:

How do I make raw unicode encoded content readable?

Golang convert integer to unicode character

首先,如果你没有原始字符串,你需要将它写成原始字符串并且不改变像“\n”和其他的东西,并且你想要 return 字节:

s := "3[1mString in bold.3[0m"
rune := string([]rune(s))
b := []byte(rune)
f, err := os.OpenFile("filename.txt", os.O_RDWR, 0644)
if err != nil {
return err
}
if _, err := f.Write(b); err != nil {
    return err
}

使用这种方法,字节不会改变,因此 sh265 将是相同的,并且您 return 从文件中读取它后没有进一步更改。

第二,用于读取数据和打印:

bytes, err := os.ReadFile("filename.txt")
if err != nil {
  return err
}
s = strconv.Quote(string(bytes))
fmt.Println(s)

你得到了 "\x1b[1mString in bold.\x1b[0m"