转到html/template自动json编码



尽管我猜这可能是Go模板中的一个错误,并提交了一个问题:

https://github.com/golang/go/issues/38895

我想在这里问一下Go的html/模板的"设计"行为,尤其是它带有<script>标签的规则。见下文:

package main
import (
"fmt"
"html/template"
"os"
)
type User struct {
ID   int    `json:"id"`
Name string `json:"name"`
}
func main() {
u := User{1, "xrfang"}
//without <script>
t, _ := template.New("body").Parse("var u = {{.}}")
t.Execute(os.Stdout, u)
fmt.Println()
//with <script>
t, _ = template.New("body").Parse("<script>/*var u1 = {{.}}*/ var u2 = {{.}}</script>")
t.Execute(os.Stdout, u)
fmt.Println()
}

没有<script>的模板生成的字符串与go的%+vfmt字符串的输出相同。但是<script>版本生成的JSON,/* ... */之间的代码会自动删除??

没有生成字符串的模板与go的%+v fmt字符串的输出相同。但该版本生成了JSON,代码介于/*…*/之间是否自动删除??

是。这是故意的。html/template中的转义是上下文特定的,因为它必须是上下文特定才能安全,正如包文档中所解释的那样。

最新更新