conf

package
v0.0.0-...-6a8978f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2022 License: MIT Imports: 11 Imported by: 0

README

程序配置对象管理

定义项目配置对象

// 程序所有配置信息都保存再该对象上
// Struct Tag: toml, "github.com/BurntSushi/toml"解析时 完成配置文件<-->配置对象的映射
// Struct Tag: env, "github.com/caarlos0/env/v6"解析时 完成环境变量<-->配置对象的映射
type Config struct {
	App   *app   `toml:"app" json:"app"`
	MySQL *mysql `toml:"mysql" json:"mysql"`
	Auth  *auth  `toml:"auth" json:"auth"`
}

管理配置对象上的单例对象

type mysql struct {
	Host     string `toml:"host" json:"host" env:"MYSQL_HOST"`
	Port     string `toml:"port" json:"port" env:"MYSQL_PORT"`
	Database string `toml:"database" json:"database" env:"MYSQL_DATABASE"`
	Username string `toml:"username" json:"username" env:"MYSQL_USERNAME"`
	Password string `toml:"password" json:"password" env:"MYSQL_PASSWORD"`

	// 连接池设置
	// 最大连接数
	MaxOpenConn int `toml:"max_open_conn" json:"max_open_conn" env:"MYSQL_MAX_OPEN_CONN"`
	// 最大的最大闲置连接数
	MaxIdleConn int `toml:"max_idel_conn" json:"max_idel_conn" env:"MYSQL_MAX_IDLE_CONN"`
	// 连接的有效时间, 小于服务端的设置时间
	MaxLifeTime int `toml:"max_life_time" json:"max_life_time" env:"MYSQL_MAX_LIFE_TIME"`
	// 一个闲置的连接多久没用会被释放
	MaxIdleTime int `toml:"max_idel_time" json:"max_idel_time" env:"MYSQL_MAX_IDEL_TIME"`

	lock   sync.Mutex
	dbconn *sql.DB
	orm    *gorm.DB
}

func (m *mysql) Dsn() string {
	return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&multiStatements=true",
		m.Username,
		m.Password,
		m.Host,
		m.Port,
		m.Database,
	)
}

func (m *mysql) GetORMDB() *gorm.DB {
	m.lock.Lock()
	defer m.lock.Unlock()

	if m.orm == nil {
		db, err := gorm.Open(gormmysql.Open(m.Dsn()))
		if err != nil {
			panic(err)
		}
		m.orm = db
	}

	return m.orm
}

配置对象默认值初始化

当你的程序没有配置文件时,也能有默认值,并且可以正常运行

func NewDefaultConfig() *Config {
	return &Config{
		App:   newDefautApp(),
		MySQL: newDefautMySQL(),
		Auth:  &auth{},
	}
}

func newDefautMySQL() *mysql {
	return &mysql{
		Host:     "localhost",
		Port:     "3306",
		Database: "vblog",
		Username: "root",
		Password: "123456",
	}
}

配置对象实现全局单例

var (
	// 为了保护该变量不被外部修改, 未暴露
	config *Config
)

// 单独提供一个方式 Getter
func C() *Config {
	if config == nil {
		panic("load config first")
	}

	return config
}

配置对象加载

// 从环境变量中加载配置, 加载成 一个全局变量
func LoadConfigFromEnv() error {
	config = NewDefaultConfig()
	return env.Parse(config)
}

func LoadConfigFromToml(filepath string) error {
	config = NewDefaultConfig()
	_, err := toml.DecodeFile(filepath, config)
	if err != nil {
		return err
	}
	return nil
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoadConfigFromEnv

func LoadConfigFromEnv() error

从环境变量中加载配置, 加载成 一个全局变量

func LoadConfigFromToml

func LoadConfigFromToml(filepath string) error

Types

type Config

type Config struct {
	App   *app   `toml:"app" json:"app"`
	MySQL *mysql `toml:"mysql" json:"mysql"`
	Auth  *auth  `toml:"auth" json:"auth"`
}

程序所有配置信息都保存再该对象上 Struct Tag: toml, "github.com/BurntSushi/toml"解析时 完成配置文件<-->配置对象的映射 Struct Tag: env, "github.com/caarlos0/env/v6"解析时 完成环境变量<-->配置对象的映射

func C

func C() *Config

单独提供一个方式 Getter

func NewDefaultConfig

func NewDefaultConfig() *Config

func (*Config) String

func (c *Config) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL