我正在使用模板包生成一些源代码(有没有更好的方法?)和测试的一部分,我需要检查输出是否与预期的源代码匹配。
我尝试了字符串比较,但由于模板包生成的额外空格/新行而失败。我也试过format.Source没有成功。( 失败)
我试图解析两个源的 ast(见下文),但即使除了新行/空格之外,代码基本相同,但 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)
}
}
有只小跳蛙
红颜莎娜
相关分类