config

package module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Oct 9, 2024 License: Apache-2.0 Imports: 13 Imported by: 0

README

go-config

介绍

golang读取yaml、yml、json、toml文件配置,也可同时读取ENV环境变量。

使用说明
NewConfig
package main

import (
	"fmt"
	config "gitee.com/jishulangcom/go-config"
)

type ConfigDto struct {
	MysqlCnf config.MysqlCnfDto
	RedisCnf config.RedisCnfDto

	//
	Port    int     `env:"port" required:"false"` // int类型值是0时,设置required为true时会报错`required`
	Port2   int64   `env:"port2"`
	Enabled bool    `env:"enabled"` // bool类型没必要设置required标签
	Version float64 `env:"version"`
	Test    struct {
		T1    string `env:"TestT1"`
		T2    string
		T3    string
		Test2 struct {
			T1 string
			T2 string
			T3 string `required:"false"`
		} `required:"required"` // 这里设置的required标签不会验证
	} `yaml:"test"`
}

var conf ConfigDto

func init() {
	config.NewConfig(&conf, config.CONFIG_TYPE_JSON) //CONFIG_TYPE_YAML、CONFIG_TYPE_YML、CONFIG_TYPE_JSON、CONFIG_TYPE_TOML
    // config.NewConfigYaml(&conf)
    // config.NewConfigYml(&conf)
    // config.NewConfigJson(&conf)
    // config.NewConfigToml(&conf)
}

func main() {
	fmt.Println(conf)
}
# 更新依赖
go mod tidy

# 运行main

程序初次运行会在根目录生成相关配置文件:

-|config
--|.env                    # 开发时用变量文件
--|.env.dev                # 开发环境用变量文件
--|.env.local              # 本地环境用变量文件
--|.env.prod               # 正式环境用变量文件
--|.env.uat                # 测试环境用变量文件
--|settings.json           # 开发时用配置文件
--|settings_dev.json       # 开发环境用配置文件
--|settings_local.json     # 本地环境用配置文件
--|settings_prod.json      # 正式环境用配置文件
--|settings_uat.json       # 测试环境用配置文件
settings使用

默认取settings文件的配置

若Environment配置了,优先取对应环境的settings文件

# .env
Environment=dev

# settings.yaml
mysqlcnf:
    host: "127.0.0.1"
    port: 111111
    user: "root"
    pwd: "123456"
    dbname: "test"
    charset: "utf-8"
    debug: false

# settings_dev.yaml
mysqlcnf:
    debug: true
rediscnf:
    host: ""
    port: 0
    pwd: ""
    db: 0
    debug: false

###### 最终取得配置 ######
conf: {
  "MysqlCnf": {
    "Host": "127.0.0.1",
    "Port": 111111,
    "User": "root",
    "Pwd": "123456",
    "DbName": "test",
    "Charset": "utf-8",
    "Debug": true        #注意:这里优先取dev的配置
  },
  "RedisCnf": {
    "Host": "",
    "Port": 0,
    "Pwd": "",
    "DB": 0,
    "Debug": false
  },
}
env使用
# 结构体定义
type ConfigDto struct {
	Port    int     `env:"port"`  # 这里指定取环境变量port值
}

# .env
port=1234

# settings.yaml
port: 5678

###### 最终取得配置 ######
{
	"Port": 1234
}

.env各文件只是存放各环境的变量。

在生产环境中,建议不要使用 .env 文件,而是使用更安全的方法来管理环境变量,例如使用环境变量管理工具或者容器化你的应用并使用 Docker secrets 或 Kubernetes secrets。

生产环境物必确认Environment值。

常见问题
若在IDE上运行,如果配置了required:"true" ,会报panic,须导入环境变量
# 安装EnvFile插件
File =》 Settings =》 Plugins => Marketplace => 搜索`EnvFile` =》 安装。

# 导入.env文件
Edit Configurations =》 EnvFile => 勾选Enable EnvFile =》 Add => 选择项目根目录的`config/.env`文件 或 其它.env环境文件。
引用的三方包
gitee.com/jishulangcom/go-fun v0.0.3
github.com/BurntSushi/toml v1.4.0
github.com/pelletier/go-toml/v2 v2.2.2
gopkg.in/yaml.v3 v3.0.1
待解决问题
  1. 变更结构体后不会更新配置文件

Documentation

Index

Constants

View Source
const (
	CONFIG_TYPE_YAML = "yaml"
	CONFIG_TYPE_YML  = "yml"
	CONFIG_TYPE_JSON = "json"
	CONFIG_TYPE_TOML = "toml"
)
View Source
const CONFIG_DIR = "config"
View Source
const SETTINGS_NAME = "settings"

Variables

View Source
var ClickHouseCnf = ClickHouseCnfDto{
	Host:   "127.0.0.1",
	Port:   9000,
	Pwd:    "",
	DbName: "",
	Debug:  true,
}
View Source
var KafkaCnf = KafkaCnfDto{
	Host:  "127.0.0.1",
	Port:  9092,
	Debug: true,
}
View Source
var PostgreSqlCnf = PostgreSqlCnfDto{
	Host:    "127.0.0.1",
	Port:    5432,
	User:    "postgres",
	Pwd:     "",
	DbName:  "postgres",
	Debug:   true,
	MaxConn: 10,
}
View Source
var PostgreSqlPoolCnf = PostgreSqlPoolCnfDto{
	MaxConn: 10,
}
View Source
var RabbitMQCnf = RabbitMQCnfDto{
	Host:  "127.0.0.1",
	Port:  5672,
	User:  "",
	Pwd:   "",
	Vhost: "",
	Debug: true,
}
View Source
var RedisCnf = RedisCnfDto{
	Host:  "127.0.0.1",
	Port:  6379,
	Pwd:   "",
	DB:    0,
	Debug: true,
}
View Source
var RedisPoolCnf = RedisPoolCnfDto{
	PoolSize:           4,
	MinIdleConns:       10,
	DialTimeout:        5,
	ReadTimeout:        3,
	WriteTimeout:       3,
	PoolTimeout:        4,
	IdleCheckFrequency: 60,
	IdleTimeout:        5,
	MaxConnAge:         0,
	MaxRetries:         0,
	MinRetryBackoff:    8,
	MaxRetryBackoff:    512,
	Timeout:            5,
	KeepAlive:          5,
}
View Source
var TarantoolCnf = TarantoolCnfDto{
	Host:  "127.0.0.1",
	Port:  3301,
	Pwd:   "",
	User:  "",
	Debug: true,
}

Functions

func NewConfig

func NewConfig(conf interface{}, configType string)

new一个配置

func NewConfigJson added in v0.0.2

func NewConfigJson(conf interface{})

func NewConfigToml added in v0.0.2

func NewConfigToml(conf interface{})

func NewConfigYaml added in v0.0.2

func NewConfigYaml(conf interface{})

func NewConfigYml added in v0.0.2

func NewConfigYml(conf interface{})

Types

type ClickHouseCnfDto

type ClickHouseCnfDto struct {
	Host   string // 服务器地址
	Port   int    // 端口
	User   string // 用户名
	Pwd    string // 密码
	DbName string // 库名
	Debug  bool   // 调试
}

type FacebookOAuthCnfDto

type FacebookOAuthCnfDto struct {
	ClientID     string // 客户端ID
	ClientSecret string // 客户端密钥
	RedirectURL  string // 回调地址
	Debug        bool   // 调试
}

type GoogleOAuthCnfDto

type GoogleOAuthCnfDto struct {
	ClientID     string // 客户端ID
	ClientSecret string // 客户端密钥
	RedirectURL  string // 回调地址
	Debug        bool   // 调试
}

type GrpcCnfDto

type GrpcCnfDto struct {
	Host string // 地址
	Port string // 端口
}

type HttpCnfDto

type HttpCnfDto struct {
	ListenHTTP string
	Profile    bool
	Prometheus bool
	Tracing    bool
	Verbose    bool
}

type KafkaCnfDto

type KafkaCnfDto struct {
	Host  string // 服务器地址
	Port  int    // 端口
	Debug bool   // 调试
}

type LogCnfDto

type LogCnfDto struct {
	Debug    bool
	Output   string
	Level    string
	Encoding string
}

type MysqlCnfDto

type MysqlCnfDto struct {
	Host    string // 服务器地址
	Port    int    // 端口
	User    string // 用户名
	Pwd     string // 密码
	DbName  string // 库名
	Charset string //
	Debug   bool   // 调试

}

type NacosCnfDto

type NacosCnfDto struct {
	Host      string
	Port      uint64
	DataId    string
	Group     string
	NameSpace string
}

type PostgreSqlCnfDto

type PostgreSqlCnfDto struct {
	Host    string // 服务器地址
	Port    int    // 端口
	User    string // 用户名
	Pwd     string // 密码
	DbName  string // 库名
	Debug   bool   // 调试
	MaxConn int    // 最大连接
}

type PostgreSqlPoolCnfDto

type PostgreSqlPoolCnfDto struct {
	MaxConn int // 最大连接
}

type RabbitMQCnfDto

type RabbitMQCnfDto struct {
	Host  string // 服务器地址
	Port  int    // 端口
	User  string // 用户名
	Pwd   string // 密码
	Vhost string // 密码
	Debug bool   // 调试
}

type RedisCnfDto

type RedisCnfDto struct {
	Host  string // 服务器地址
	Port  int    // 端口
	Pwd   string // 密码
	DB    int    // 库
	Debug bool   // 调试
}

type RedisPoolCnfDto

type RedisPoolCnfDto struct {
	PoolSize           int // 连接池最大socket连接数,默认为4倍CPU数, 4 * runtime.NumCPU
	MinIdleConns       int // 在启动阶段创建指定数量的Idle连接,并长期维持idle状态的连接数不少于指定数量;。
	DialTimeout        int // 连接建立超时时间,默认5秒。
	ReadTimeout        int // 读超时,默认3秒, -1表示取消读超时
	WriteTimeout       int // 写超时,默认等于读超时
	PoolTimeout        int // 当所有连接都处在繁忙状态时,客户端等待可用连接的最大等待时长,默认为读超时+1秒。
	IdleCheckFrequency int // 闲置连接检查的周期,默认为1分钟,-1表示不做周期性检查,只在客户端获取连接时对闲置连接进行处理。
	IdleTimeout        int // 闲置超时,默认5分钟,-1表示取消闲置超时检查
	MaxConnAge         int // 连接存活时长,从创建开始计时,超过指定时长则关闭连接,默认为0,即不关闭存活时长较长的连接
	MaxRetries         int // 命令执行失败时,最多重试多少次,默认为0即不重试
	MinRetryBackoff    int // 每次计算重试间隔时间的下限,默认8毫秒,-1表示取消间隔
	MaxRetryBackoff    int // 每次计算重试间隔时间的上限,默认512毫秒,-1表示取消间隔
	Timeout            int //
	KeepAlive          int //
}

type TarantoolCnfDto

type TarantoolCnfDto struct {
	Host  string // 服务器地址
	Port  int    // 端口
	Pwd   string // 密码
	User  string // 用户名
	Debug bool   // 调试
}

Jump to

Keyboard shortcuts

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