package template import ( "fmt" "strings" "text/template" ) type Template struct { GlobTemplate *template.Template } var DefaultFuncMap = template.FuncMap{ "hd": hd, "title": strings.Title, "join": strings.Join, "list": func(strs []string) string { return strings.Join(strs, ",") }, "cmd2func": func(str string) string { splits := strings.Split(str, "/") return splits[len(splits)-1] }, "exports": func(port []any) string { var out []string for _, p := range port { p2 := p.(map[string]interface{}) splits := strings.Split(p2["Cmd"].(string), "/") funcName := splits[len(splits)-1] out = append(out, fmt.Sprintf("%s/5", funcName)) } return strings.Join(out, ",") }, } func hd(str []string) string { return str[0] } func NewTemplate() *Template { return &Template{} } func (t *Template) ParseGlob(pattern string) error { parse, err := template.New(""). Funcs(DefaultFuncMap).ParseGlob(pattern) if err != nil { return err } t.GlobTemplate = template.Must(parse, nil) return nil } func (t *Template) ExecuteTemplate(templateName2 string, data interface{}) (string, error) { var buf strings.Builder err := t.GlobTemplate.ExecuteTemplate(&buf, templateName2, data) if err != nil { return "", err } return buf.String(), nil }