github.com/lovung/GoCleanArchitecture@v0.0.0-20210302152432-50d91fd29f9f/app/config/config.go (about) 1 package config 2 3 import ( 4 "fmt" 5 "strings" 6 "sync" 7 "time" 8 ) 9 10 var ( 11 once sync.Once 12 singleton *Config 13 ) 14 15 // SetConfig to set configuration of service. 16 func SetConfig(cfg *Config) *Config { 17 once.Do(func() { 18 singleton = cfg 19 }) 20 return singleton 21 } 22 23 // GetConfig gets the instance of singleton 24 func GetConfig() *Config { 25 return singleton 26 } 27 28 // MySQL config for MySQL server 29 type MySQL struct { 30 ConnectionString string // if this field is non empty then other fields will be ignore when building connection string 31 Host string 32 User string 33 Password string 34 DB string 35 Port string 36 MaxOpenConns int 37 MaxIdleConns int 38 ConnMaxLifetime int // time in minute 39 IsEnabledLog bool 40 } 41 42 // Conn return connection string 43 func (m *MySQL) Conn() string { 44 if m.ConnectionString != "" { 45 connStr := strings.TrimPrefix(m.ConnectionString, "mysql://") 46 connStr = strings.Split(connStr, "?")[0] 47 connStr = strings.Replace(connStr, "@", "@tcp(", 1) 48 if strings.Contains(connStr, ":3306") { 49 connStr = strings.Replace(connStr, "/", ")/", 1) 50 } else { 51 connStr = strings.Replace(connStr, "/", ":3306)/", 1) 52 } 53 connStr += "?parseTime=true&charset=utf8mb4" 54 55 return connStr 56 } 57 58 return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&charset=utf8mb4", 59 m.User, m.Password, m.Host, m.Port, m.DB) 60 } 61 62 // ServerCfg server addresses 63 type ServerCfg struct { 64 Port string 65 Timeout time.Duration 66 } 67 68 // Config is APP config information 69 type Config struct { 70 Env string 71 HTTPServer ServerCfg 72 MySQL MySQL 73 LogLevel string 74 JWTSecret string 75 EnabledProfiling bool 76 }