cfg

package
v1.3.3 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

README

cfg

cfg 提供基于 Viper 的配置加载与读取能力,兼顾结构体绑定和简单的 cfg.GetXxx 访问方式,同时支持默认值与类型检查。

快速开始

import "your/module/path/config/cfg"

// 可选:将配置绑定到结构体
var conf struct {
    App struct {
        Name string `mapstructure:"name"`
        Port int    `mapstructure:"port"`
    } `mapstructure:"app"`
}

// 加载配置文件并绑定(target 可以为 nil)
manager, err := cfg.Load(&conf) // 自动查找 config.yml 或 .env
if err != nil {
    panic(err)
}

// 直接通过 manager 读取
name, err := manager.GetString("app.name")         // 如果缺失返回 ErrNotFound
port, err := manager.GetInt("app.port", 8080)      // 缺失时落回默认值

// 或使用包级函数读取(依赖默认管理器)
debug, err := cfg.GetBool("flags.debug", false)

默认值与错误处理

  • Getter 的最后一个参数可以传入默认值,键缺失时直接返回该值且不报错。
  • 未提供默认值且键缺失,返回 ErrNotFound
  • 类型不匹配时返回 ErrTypeMismatch
  • 未加载配置时调用包级 Getter,会返回 ErrNotLoaded

支持的 Getter

与 Viper 常用接口保持一致:GetStringGetBoolGetIntGetInt64GetFloat64GetDurationGetTimeGetStringSliceGetStringMapGetStringMapString,每个都支持可选默认值。可通过 IsSet 判断键是否存在。

配置文件查找规则

  1. 如果 cfg.Load 指定了路径且文件存在,优先使用该路径。
  2. 未指定路径时,会在工作目录、上级目录及各自的 configs/config/ 目录中依次查找 config.yml,找不到再查 .env
  3. 环境变量可以覆盖配置:
    • 若设置了 APP_NAME,则使用其大写作为前缀(如 APP_NAME=myapp,环境变量为 MYAPP_APP_NAME)。
    • 键名中的 . 会转换为 _,并允许空值覆盖(例如 app.name 对应 APP_NAME 前缀下的 APP_NAME 环境变量)。

线程安全

Manager 对读取操作加读写锁,满足并发读取场景;不支持热更新。

Documentation

Overview

Package cfg provides configuration management functionality.

Deprecated: This package is deprecated. Use github.com/tsopia/go-kit/cfg instead. The new cfg package located at the project root provides a cleaner API with better error handling and a unified constructor design.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotLoaded    = errors.New("cfg: configuration not loaded")
	ErrNotFound     = errors.New("cfg: key not found")
	ErrTypeMismatch = errors.New("cfg: type mismatch")
)

Functions

func GetBool

func GetBool(key string, defaultValue ...bool) (bool, error)

GetBool 读取布尔配置,支持可选默认值。

func GetDuration

func GetDuration(key string, defaultValue ...time.Duration) (time.Duration, error)

GetDuration 读取 time.Duration 配置,支持可选默认值。

func GetFloat64

func GetFloat64(key string, defaultValue ...float64) (float64, error)

GetFloat64 读取 float64 配置,支持可选默认值。

func GetInt

func GetInt(key string, defaultValue ...int) (int, error)

GetInt 读取 int 配置,支持可选默认值。

func GetInt64

func GetInt64(key string, defaultValue ...int64) (int64, error)

GetInt64 读取 int64 配置,支持可选默认值。

func GetString

func GetString(key string, defaultValue ...string) (string, error)

GetString 读取字符串配置,支持可选默认值。

func GetStringMap

func GetStringMap(key string, defaultValue ...map[string]interface{}) (map[string]interface{}, error)

GetStringMap 读取字符串键的 map 配置,支持可选默认值。

func GetStringMapString

func GetStringMapString(key string, defaultValue ...map[string]string) (map[string]string, error)

GetStringMapString 读取 map[string]string 配置,支持可选默认值。

func GetStringSlice

func GetStringSlice(key string, defaultValue ...[]string) ([]string, error)

GetStringSlice 读取字符串切片配置,支持可选默认值。

func GetTime

func GetTime(key string, defaultValue ...time.Time) (time.Time, error)

GetTime 读取 time.Time 配置,支持可选默认值。

func IsSet

func IsSet(key string) (bool, error)

IsSet 判断配置项是否存在。

Types

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 管理一个 viper 实例,提供类型安全的读取能力。

func Default

func Default() (*Manager, error)

Default 返回已经初始化的默认管理器。

func Load

func Load(target interface{}, filePath ...string) (*Manager, error)

Load 创建配置管理器并可选地将配置绑定到结构体。

如果 target 不为 nil,会将配置解析到 target 指向的结构体中。 创建成功后会更新全局默认管理器,后续包级别的 Getter 将使用该实例。

func (*Manager) GetBool

func (m *Manager) GetBool(key string, defaultValue ...bool) (bool, error)

GetBool 读取布尔配置,支持可选默认值。

func (*Manager) GetDuration

func (m *Manager) GetDuration(key string, defaultValue ...time.Duration) (time.Duration, error)

GetDuration 读取 time.Duration 配置,支持可选默认值。

func (*Manager) GetFloat64

func (m *Manager) GetFloat64(key string, defaultValue ...float64) (float64, error)

GetFloat64 读取 float64 配置,支持可选默认值。

func (*Manager) GetInt

func (m *Manager) GetInt(key string, defaultValue ...int) (int, error)

GetInt 读取 int 配置,支持可选默认值。

func (*Manager) GetInt64

func (m *Manager) GetInt64(key string, defaultValue ...int64) (int64, error)

GetInt64 读取 int64 配置,支持可选默认值。

func (*Manager) GetString

func (m *Manager) GetString(key string, defaultValue ...string) (string, error)

GetString 读取字符串配置,支持可选默认值。

func (*Manager) GetStringMap

func (m *Manager) GetStringMap(key string, defaultValue ...map[string]interface{}) (map[string]interface{}, error)

GetStringMap 读取字符串键的 map 配置,支持可选默认值。

func (*Manager) GetStringMapString

func (m *Manager) GetStringMapString(key string, defaultValue ...map[string]string) (map[string]string, error)

GetStringMapString 读取 map[string]string 配置,支持可选默认值。

func (*Manager) GetStringSlice

func (m *Manager) GetStringSlice(key string, defaultValue ...[]string) ([]string, error)

GetStringSlice 读取字符串切片配置,支持可选默认值。

func (*Manager) GetTime

func (m *Manager) GetTime(key string, defaultValue ...time.Time) (time.Time, error)

GetTime 读取 time.Time 配置,支持可选默认值。

func (*Manager) IsSet

func (m *Manager) IsSet(key string) (bool, error)

IsSet 判断配置项是否存在。

Jump to

Keyboard shortcuts

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