如何比较GO中的两个模板,示例获得了意外的结果



我想比较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

应该有一组数据输入可以使您满意这些模板是相同的,因为它们输出了相同的字节给定的输入。

相关内容

  • 没有找到相关文章

最新更新