使用golang标准库中的html/template时,在默认情况下渲染模版时为了安全等原因,会将字符串中的部分符号进行转义。

  1. 注册自定义转义处理函数
1func unescapeHTML(s string) template.HTML {
2	return template.HTML(s)
3}

在定义转义处理函数后,我们需要使用Funcs()将其注册到模版中。需要注意,注册自定义函数需要在调用Parse()前进行。在注册时我们需要定义一个函数标识符,并在模版文本中使用。在下面例子中我们使用了名为unescapeHTML的函数标识符。

 1t, err := template.New("wg_config").Funcs(template.FuncMap{
 2		"unescapeHTML": unescapeHTML,
 3	}).Parse(tmplWireguardConf)
 4...
 5
 6	config := map[string]interface{}{
 7		"now":             now,
 8		"wireGuardServer": l.svcCtx.Config.WireGuardServer,
 9		"clientDataList":  nil, // todo 传[]Client
10	}
11
12	err = t.Execute(f, config)
  1. 另外在模版文本内容中,对于需要避免转义的部分需要使用上面定义的函数。
1PrivateKey = {{ unescapeHTML  .wireGuardServer.PrivateKey }}

参考资料:

  1. https://www.ghosind.com/2022/06/28/go-template-escape-html