template.go 638 B

123456789101112131415161718192021222324
  1. package util
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // Template 对字符串中的和 map 的 key 相同的字符串进行模板替换 仅支持 形如:{name}
  7. func Template(source string, data map[string]interface{}) string {
  8. sourceCopy := &source
  9. for k, val := range data {
  10. valStr := ""
  11. switch v := val.(type) {
  12. case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
  13. valStr = fmt.Sprintf("%d", v)
  14. case bool:
  15. valStr = fmt.Sprintf("%v", v)
  16. default:
  17. valStr = fmt.Sprintf("%s", v)
  18. }
  19. *sourceCopy = strings.Replace(*sourceCopy, strings.Join([]string{"{", k, "}"}, ""), valStr, 1)
  20. }
  21. return *sourceCopy
  22. }