我想比较go中的两个模板,下面的简化示例获得了意外的结果。如何比较它们?
https://play.golang.org/p/q3exvezcfp
我尝试了深度等式,但它不起作用。
package main
import (
"encoding/json"
"fmt"
"reflect"
"strings"
"text/template"
)
// basicFunctions are the set of initial
// functions provided to every template.
var basicFunctions = template.FuncMap{
"json": func(v interface{}) string {
a, _ := json.Marshal(v)
return string(a)
},
"split": strings.Split,
"join": strings.Join,
"title": strings.Title,
"lower": strings.ToLower,
"upper": strings.ToUpper,
}
func main() {
t1, _ := template.New("").Funcs(basicFunctions).Parse("{{.ID}}")
t2, _ := template.New("").Funcs(basicFunctions).Parse("{{.ID}}")
fmt.Println(reflect.DeepEqual(t1, t2)) // want to be true, actually false
}
我想获得true
答案。
使用相同的数据执行两个模板,但将每个模板写入其他缓冲区。比较缓冲区中的字节。重复不同的数据,直到它们差异化,否则您对它们是相同的满意。
t1, _ := template.New("").Funcs(basicFunctions).Parse("{{.ID}}")
t2, _ := template.New("").Funcs(basicFunctions).Parse("{{.ID}}")
var b1, b2 bytes.Buffer
d := struct{ ID string }{ID: "test"}
t1.Execute(&b1, d)
t2.Execute(&b2, d)
fmt.Println(bytes.Equal(b1.Bytes(), b2.Bytes())) // true
https://play.golang.org/p/jz2lbmf-4ry
应该有一组数据输入可以使您满意这些模板是相同的,因为它们输出了相同的字节给定的输入。