Как сравнить два шаблона в go, на примере получим неожиданный результат - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу сравнить два шаблона в Go, упрощенный пример ниже дает неожиданный результат.Как их сравнить?

https://play.golang.org/p/Q3eAxVEzcFp

Я пробовал DeepEqual, но он не работает.

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 ответ.

1 Ответ

0 голосов
/ 26 декабря 2018

Выполните два шаблона, используя одинаковые данные, но запишите каждый в другой буфер.Сравните байты в буферах.Повторяйте с различными данными, пока они не расходятся, или вы не убедитесь, что они одинаковы.

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

Должен быть некоторый набор входных данных, который бы удовлетворил вас, что эти шаблоныодинаковы, учитывая, что они выдают одинаковые байты при одинаковых входных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...