gitee.com/haifengat/gotap_dipper@v0.0.4-0.20231212021028-041a6fa876e5/generate/utils.go (about)

     1  package generate
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"path"
     7  	"text/template"
     8  )
     9  
    10  // var srcPath = "../v9.3.7.5_20220228"
    11  var srcPath = []string{"../v9.3.8.7_20230117", "quote_v9.3.1.4_20190925"}
    12  
    13  // readFile 文件先手动转为 UTF8
    14  //
    15  //	@param fileNames
    16  //	@return string
    17  func readFile(fileNames ...string) string {
    18  	var str string
    19  	for _, fileName := range fileNames {
    20  		var fileFullPath string
    21  		for _, v := range srcPath {
    22  			if _, err := os.Stat(path.Join(v, fileName)); err == nil {
    23  				fileFullPath = path.Join(v, fileName)
    24  				break
    25  			}
    26  		}
    27  		bs, err := os.ReadFile(fileFullPath)
    28  		if err != nil {
    29  			panic(err)
    30  		}
    31  		str += string(bs)
    32  	}
    33  	return str
    34  }
    35  
    36  func writeTmpl(tplFile string, writeToFile string, data any, funcMaps ...template.FuncMap) {
    37  	var err error
    38  	t := template.New(tplFile).Delims("[[", "]]")
    39  	// funcMap 加入 Funcs
    40  	for _, fm := range funcMaps {
    41  		t = t.Funcs(fm)
    42  	}
    43  	if t, err = t.ParseFiles(tplFile); err != nil {
    44  		panic(err)
    45  	}
    46  
    47  	buf := bytes.Buffer{}
    48  	if err = t.Execute(&buf, data); err != nil {
    49  		panic(err)
    50  	}
    51  	// 解决 & 生成tmp 后多出的 amp;
    52  	// 用 text/template 替代 html/template 解决
    53  	// bs := buf.Bytes()
    54  	// bs = bytes.ReplaceAll(bs, []byte("amp;"), []byte(""))
    55  	if err = os.WriteFile(writeToFile, buf.Bytes(), os.ModePerm); err != nil {
    56  		panic(err)
    57  	}
    58  }