common.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package config
  2. import (
  3. "designs/app/common/log"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "github.com/pkg/errors"
  8. )
  9. type ConfigRootFunc func() *ConfigNode
  10. type ConfigEnv [2]string
  11. type ConfigNode map[string]interface{}
  12. type ConfigRoot map[string]ConfigRootFunc
  13. var EnvMap map[string]string
  14. var Root = make(map[string]*ConfigNode)
  15. func env(envField, defaultValue string) string {
  16. if envValue, ok := EnvMap[envField]; ok {
  17. return envValue
  18. } else {
  19. return defaultValue
  20. }
  21. }
  22. // 初始化配置信息
  23. func InitConfig(envMap map[string]string, root *ConfigRoot) error {
  24. EnvMap = envMap
  25. for k, v := range *root {
  26. Root[k] = v()
  27. }
  28. return nil
  29. }
  30. // 打印配置信息
  31. func PrintConfig() {
  32. for k, v := range Root {
  33. printConfigNode(k, v)
  34. }
  35. }
  36. func printConfigNode(prefix string, node *ConfigNode) {
  37. for k, v := range *node {
  38. if strValue, ok := v.(string); ok {
  39. fmt.Printf("%-50s%s\n", prefix+"."+k, strValue)
  40. } else if _, ok := v.(*ConfigNode); ok {
  41. printConfigNode(prefix+"."+k, v.(*ConfigNode))
  42. } else {
  43. fmt.Printf("%-50s%+v\n", prefix+"."+k, v)
  44. }
  45. }
  46. }
  47. // 获取配置信息
  48. func Get(k string) string {
  49. kList := strings.Split(k, ".")
  50. if len(kList) < 2 {
  51. log.Errorf("get error config: %s", k)
  52. return ""
  53. }
  54. //获取第一个节点[1,1]
  55. node, ok := Root[kList[0]]
  56. if !ok {
  57. log.Errorf("get not exist config: %s", k)
  58. return ""
  59. }
  60. //循环[2, n-1]
  61. for _, v := range kList[1 : len(kList)-1] {
  62. if n, ok := (*node)[v]; ok {
  63. if nn, ok := n.(*ConfigNode); ok {
  64. node = nn
  65. } else {
  66. log.Errorf("get not exist config: %s", k)
  67. return ""
  68. }
  69. } else {
  70. log.Errorf("get not exist config: %s", k)
  71. return ""
  72. }
  73. }
  74. //最后一个节点[n,n]
  75. if n, ok := (*node)[kList[len(kList)-1]]; ok {
  76. if sv, ok := n.(string); ok {
  77. return sv
  78. } else {
  79. log.Errorf("get not exist config: %s", k)
  80. return ""
  81. }
  82. }
  83. log.Errorf("get not exist config: %s", k)
  84. return ""
  85. }
  86. func GetNode(k string) (*ConfigNode, error) {
  87. kList := strings.Split(k, ".")
  88. //获取第一个节点[1,1]
  89. node, ok := Root[kList[0]]
  90. if !ok {
  91. log.Errorf("get not exist config: %s", k)
  92. return nil, errors.New("get not exist config")
  93. }
  94. //循环[2, n-1]
  95. if len(kList) > 2 {
  96. for _, v := range kList[1 : len(kList)-1] {
  97. if n, ok := (*node)[v]; ok {
  98. if nn, ok := n.(*ConfigNode); ok {
  99. node = nn
  100. } else {
  101. log.Errorf("get not exist config: %s", k)
  102. return nil, errors.New("get not exist config")
  103. }
  104. } else {
  105. log.Errorf("get not exist config: %s", k)
  106. return nil, errors.New("get not exist config")
  107. }
  108. }
  109. }
  110. return node, nil
  111. }
  112. // 获取配置信息,并转成int
  113. func GetInt(k string) int {
  114. v := Get(k)
  115. if v == "" {
  116. return 0
  117. }
  118. i, err := strconv.Atoi(v)
  119. if err != nil {
  120. log.Warnf("can not convert %s, value %s to int", k, v)
  121. return 0
  122. }
  123. return i
  124. }
  125. func GetInt64(k string) int64 {
  126. return int64(GetInt(k))
  127. }
  128. // 获取配置信息,并转成bool
  129. func GetBool(k string) bool {
  130. v := Get(k)
  131. if v == "" {
  132. return false
  133. }
  134. return v == "true"
  135. }