package component import ( "gitee.ltd/lxh/logger/log" "html/template" "os" "strings" ) type TemplateComponent struct{} func Template() TemplateComponent { return TemplateComponent{} } // Execute // @description: 渲染数据模板并生成对应文件 // @receiver t // @param templateFilePath // @param outFilePath // @param data // @return err func (t TemplateComponent) Execute(templateFilePath, outFilePath string, data any) (err error) { parseTemplate, err := t.ParseTemplate(templateFilePath) if err != nil { log.Errorf("解析模板信息失败:%v", err.Error()) return err } err = t.Render(parseTemplate, data, outFilePath) if err != nil { log.Errorf("渲染模板失败: %v", err.Error()) return err } return nil } // ParseTemplate // @description: 解析模板 // @receiver t // @param filepath // @return t // @return err func (t TemplateComponent) ParseTemplate(filepath string) (tp *template.Template, err error) { file, err := os.ReadFile(filepath) if err != nil { return } tp, err = template.New("wg.conf").Funcs(t.FuncMap()).Parse(string(file)) return } // Render // @description: 渲染模板 // @receiver t // @param tp // @param data // @param filepath // @return err func (t TemplateComponent) Render(tp *template.Template, data any, filepath string) (err error) { wg0Conf, err := os.Create(filepath) if err != nil { log.Errorf("创建文件[%s]失败: %v", filepath, err.Error()) return } defer func() { if err = wg0Conf.Close(); err != nil { log.Errorf("关闭文件[%s]失败: %v", filepath, err.Error()) return } }() return tp.Execute(wg0Conf, data) } // FuncMap // @description: 模板内的操作方法 // @receiver t // @return template.FuncMap // @return error func (t TemplateComponent) FuncMap() template.FuncMap { sliceToString := func(str []string) string { return strings.Join(str, ",") } return template.FuncMap{ "sliceToStr": sliceToString, } }