You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go模板中如何打印含转义字符的原始文本?

Go模板保留原始转义字符输出的解决方法

你的场景是:结构体中Data字段的字符串包含\r\n转义序列,但用{{ .Data }}渲染时,转义序列被解析成了实际换行,想要保持原始的\r\n字符输出。

Go模板没有直接的内置功能实现这个需求,但可以通过两种方式解决:

方法一:预双重转义字符串

在给Data赋值时,把反斜杠再转义一次(写成\\r\\n),这样模板渲染时,输出的就是原始的\r\n:

strct.Data = "{ \"hello\": \"ok\", \\r\\n \"text\": \"value\" }"

此时用{{ .Data }}渲染,就能得到你想要的输出:

value = `{ "hello": "ok", \r\n "text": "value" }`

方法二:自定义模板转义函数

如果不想修改原始字符串,可以自定义一个模板函数,将字符串中的控制字符(如回车、换行)转义回对应的转义序列:

  1. 定义转义函数:
import "bytes"

func escapeSpecialChars(s string) string {
    var buf bytes.Buffer
    for _, c := range s {
        switch c {
        case '\r':
            buf.WriteString("\\r")
        case '\n':
            buf.WriteString("\\n")
        // 可按需添加其他需要转义的字符,比如\t、\"等
        default:
            buf.WriteRune(c)
        }
    }
    return buf.String()
}
  1. 注册函数到模板并使用:
tpl := template.Must(template.New("tpl").Funcs(template.FuncMap{
    "escape": escapeSpecialChars,
}).Parse(`value = "{{ escape .Data }}"`))

渲染时调用{{ escape .Data }},即可保留原始转义字符输出。


内容的提问来源于stack exchange,提问作者Rafael Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:35:20