Help us shape the future of Go! Take the 2026 Go Developer Survey

configx

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package configx 提供 YAML、TOML、JSON 文件的结构体解析与全局命名配置。

依赖 Viper,统一使用 mapstructure 标签;未知字段通过 UnmarshalExact 报错, 缺失字段保留零值,禁用弱类型转换;字符串转 int/bool、bool 转 int 等会报错。 保留 Viper 默认的时长和逗号分隔切片解码 hook。JSON 保留数字精度再映射。 JSON 数字不经过字符串 hook,不隐式转为字符串;整数时长按纳秒解析。 Viper 的键名不区分大小写;不隐式执行业务校验或填充默认值。 结构体映射保留源数据中的 null、空对象和字面键名,不经点号路径展开。

以下示例需导入 github.com/bpcoder16/pixiu/infra/configx:

type ServerConfig struct {
    Addr string `mapstructure:"addr"`
    Port int    `mapstructure:"port"`
}
parsed, err := configx.Parse[ServerConfig]("./conf/server.yaml")
if err != nil {
    return err
}
_ = parsed.Port

if err := configx.Load[ServerConfig]("server", "./conf/server.yaml"); err != nil {
    return err
}
cfg, err := configx.Get[ServerConfig]("server")
if err != nil {
    return err
}
_ = cfg.Port
optional := configx.GetOrZero[ServerConfig]("optional")
_ = optional.Port

Parse 和 Load 的 T 必须是结构体。文件后缀忽略大小写,支持 .yaml、.yml、.toml、.json; 相对路径基于工作目录。Parse 每次重新读取文件,返回独立的配置指针,不注册全局配置。 Load 复用 Parse 解析并注册,加载失败不注册,成功后同名配置不得覆盖或重新加载。 Get 不重新读取文件,每次返回同一共享指针;GetOrZero 获取失败时返回 new(T), 不占用名称,不与其他兜底对象共享数据,map、slice 和指针字段保持 nil。

注册和查询并发安全,配置内容不保证不可变;共享指针的并发读写由调用方协调。 建议启动阶段完成加载和必要调整,业务组件获取一次后保存指针。 不提供配置合并、环境变量覆盖、热更新、文件写回或 JSON5 支持。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Get

func Get[T any](name string) (*T, error)

Get 返回已注册且类型匹配的共享结构体指针,不重新读文件或拷贝内容。 名称不存在或 T 与加载时不同则返回 nil 和错误;共享对象的并发读写由调用方协调。

func GetOrZero

func GetOrZero[T any](name string) *T

GetOrZero 返回共享配置,获取失败时返回新分配的 T 零值指针。 兜底对象不注册、不共享,也不填充默认值或执行业务校验。

func Load

func Load[T any](name, filePath string) error

Load 读取 YAML、TOML 或 JSON 文件,按 mapstructure 标签解析为 T 并注册到 name。 T 必须是结构体;重复名称返回错误,读取或解析失败不占用名称。 相对路径基于工作目录,后缀忽略大小写。未知字段通过 UnmarshalExact 报错,禁用弱类型转换。

func Parse

func Parse[T any](filePath string) (*T, error)

Parse 读取 YAML、TOML 或 JSON 文件,按 mapstructure 标签解析为 T,不注册全局配置。 T 必须是结构体;每次调用返回独立的配置指针,失败返回 nil 和错误。 相对路径基于工作目录,后缀忽略大小写。未知字段通过 UnmarshalExact 报错,禁用弱类型转换。

Types

This section is empty.

Jump to

Keyboard shortcuts

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