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  }