template.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package template
  2. import (
  3. "crypto/sha1"
  4. "fmt"
  5. "io/ioutil"
  6. "text/template"
  7. )
  8. func LoadTextTemplate(filename string, funcMap ...template.FuncMap) (*template.Template, error) {
  9. var (
  10. tpl *template.Template
  11. err error
  12. )
  13. content, err := ioutil.ReadFile(filename)
  14. if err != nil {
  15. return nil, err
  16. }
  17. if len(funcMap) > 0 {
  18. tpl, err = template.New(filename).Funcs(funcMap[0]).Parse(string(content))
  19. if err != nil {
  20. return nil, err
  21. }
  22. } else {
  23. tpl, err = template.New(filename).Parse(string(content))
  24. if err != nil {
  25. return nil, err
  26. }
  27. }
  28. return tpl, nil
  29. }
  30. func LoadTextTemplateFromString(content string, funcMap ...template.FuncMap) (*template.Template, error) {
  31. var (
  32. tpl *template.Template
  33. err error
  34. )
  35. h := sha1.New()
  36. h.Write([]byte(content))
  37. name := fmt.Sprintf("%x", h.Sum(nil))
  38. if len(funcMap) > 0 {
  39. tpl, err = template.New(name).Funcs(funcMap[0]).Parse(content)
  40. if err != nil {
  41. return nil, err
  42. }
  43. } else {
  44. tpl, err = template.New(name).Parse(content)
  45. if err != nil {
  46. return nil, err
  47. }
  48. }
  49. return tpl, nil
  50. }