Я генерирую некоторый исходный код, используя templates (есть ли лучший метод?) и часть тестирования, которую мне нужно проверить если результат соответствует ожидаемому исходному коду.
- Я попробовал сравнение строк, но это не удалось из-за дополнительных пробелов/новых строк, сгенерированных пакетом шаблонов. Я также пробовал format.Source с неуспехом. (FAIL)
-
Я попытался разобрать оба источника (см. ниже), но ast не соответствует ни даже, если код в основном такой же, кроме новых строк/пробелов. (Невыполнению)
основной пакет
import ( "fmt" "go/parser" "go/token" "reflect" ) func main() { stub1 := `package main func myfunc(s string) error { return nil }` stub2 := `package main func myfunc(s string) error { return nil }` fset := token.NewFileSet() r1, err := parser.ParseFile(fset, "", stub1, parser.AllErrors) if err != nil { panic(err) } fset = token.NewFileSet() r2, err := parser.ParseFile(fset, "", stub2, parser.AllErrors) if err != nil { panic(err) } if !reflect.DeepEqual(r1, r2) { fmt.Printf("e %v, r %s, ", r1, r2) } }