config

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Jul 20, 2026 License: MIT Imports: 11 Imported by: 0

README

config 包 — 配置管理

所属层级: Core Layer
设计理念: 分层配置,热重载支持
设计灵感: Spring Environment + Spring Cloud RefreshScope

概述

config 包提供完整的配置管理解决方案,合并了原 config/environment/refresh/ 三个包的功能。支持分层配置源、Profile 机制、配置验证、热重载等特性。

核心功能
功能 说明
统一配置接口 Config 接口定义与多种类型安全的获取方法
分层配置源 Environment 提供分层配置源管理和 Profile 机制
配置加载器链 可组合的 Loader 接口,支持文件/环境变量/远程配置源
配置验证 必填、范围、正则、枚举、自定义规则验证
热重载机制 RefreshScope 支持配置变更时自动刷新 Bean
属性绑定 结构体标签绑定,支持默认值和类型转换
配置中心集成 Nacos/Etcd/Apollo 等远程配置中心抽象
子包结构
config/
├── config.go              # Config 接口定义与内存实现
├── builder.go             # ConfigBuilder 配置模型构建器
├── loader.go              # Loader 接口与 LoaderChain 加载器链
├── validator.go           # Validator 接口与验证规则
├── watcher.go             # WatchManager 热重载管理器
├── properties.go          # PropertyBinder 属性绑定器
├── configcenter.go        # 配置中心接口(Nacos/Etcd/Apollo)
├── environment/           # 环境配置管理子包
│   ├── environment.go     # Environment 环境管理器
│   └── source.go          # PropertySource 配置源接口与实现
└── refresh/               # 热重载机制子包
    ├── scope.go           # RefreshScopeManager 刷新管理器
    ├── proxy.go           # RefreshProxy 代理模式
    ├── event.go           # 配置变更事件类型
    ├── builder.go         # RefreshProxyBuilder 代理构建器
    └── router.go          # 事件路由与分发

核心接口

Config 接口
type Config interface {
    // 值获取方法
    Get(key string) any
    GetAll() map[string]any
    GetString(key string) string
    GetStringMap(key string) map[string]any
    GetStringMapString(key string) map[string]string
    GetStringSlice(key string) []string
    GetInt(key string) int
    GetInt64(key string) int64
    GetIntSlice(key string) []int
    GetFloat64(key string) float64
    GetBool(key string) bool

    // 键操作方法
    HasKey(key string) bool

    // 结构体映射方法
    Unmarshal(target any) error
    UnmarshalKey(key string, target any) error

    // 热重载方法
    Watch(callback func(WatchEvent)) error
    StopWatch() error

    // 配置源信息
    GetSource() string
}
WatchEvent 结构
type WatchEvent struct {
    Type     string   // "modify" | "delete" | "create"
    Key      string   // 变更的键名
    OldValue any      // 旧值
    NewValue any      // 新值
}

快速开始

创建配置
import "github.com/xudefa/enhance/config"

// 使用函数式选项创建配置模型
cfg, err := config.New(
    loadFn,                          // 加载函数(最后执行)
    config.WithConfigName("app"),
    config.WithConfigPath("./config", "/etc/app"),
    config.WithConfigType("yaml"),
    config.WithEnvironment("prod"),
    config.WithEnvVariable("APP"),
    config.WithConfigFile("/etc/app/config.yaml"),
    config.WithDefaultEnv(),
)
获取配置值
// 基本类型获取
cfg.Get("server.port")                  // any — 原始值
cfg.GetString("app.name")               // string
cfg.GetInt("server.port")               // int
cfg.GetInt64("timeout")                 // int64
cfg.GetFloat64("threshold")             // float64
cfg.GetBool("server.enabled")           // bool
cfg.GetStringSlice("allowed.origins")   // []string
cfg.GetStringMap("database")            // map[string]any
cfg.GetStringMapString("database")      // map[string]string
cfg.GetIntSlice("ports")                // []int
cfg.HasKey("server.host")               // bool
cfg.GetAll()                            // map[string]any — 所有配置
结构体绑定
type AppConfig struct {
    Name    string `mapstructure:"name"`
    Version string `mapstructure:"version"`
    Server  ServerConfig `mapstructure:"server"`
}

type ServerConfig struct {
    Host string `mapstructure:"host"`
    Port int    `mapstructure:"port"`
}

var appCfg AppConfig

// 全量映射
if err := cfg.Unmarshal(&appCfg); err != nil {
    log.Fatal(err)
}

// 指定前缀映射
var srvCfg ServerConfig
if err := cfg.UnmarshalKey("server", &srvCfg); err != nil {
    log.Fatal(err)
}

API 参考

配置选项
选项 说明 默认值
WithConfigName(name) 配置文件名(不含扩展名) "config"
WithConfigPath(paths...) 搜索路径 ["./", "./config"]
WithConfigType(type) 配置类型 "json"
WithEnvironment(env) 环境名称(附加到文件名) ""
WithConfigFile(path) 完整路径(优先于名称+路径) ""
WithEnvVariable(name) 环境变量前缀 ""
WithDefaultEnv() 自动检测环境(APP_ENV → GO_ENV → ENV) -
WithDefaultEnv 检测顺序
  1. 检查 APP_ENV 环境变量
  2. 检查 GO_ENV 环境变量
  3. 检查 ENV 环境变量
  4. 均未设置时使用空字符串(即无需环境后缀)
热重载
// 注册变更监听
err := cfg.Watch(func(ev config.WatchEvent) {
    fmt.Printf("配置变更: %s %s = %v → %v\n",
        ev.Type, ev.Key, ev.OldValue, ev.NewValue)
})

// 停止监听
err := cfg.StopWatch()

子包:environment — 环境配置管理

提供分层配置源(PropertySource)管理和 Profile 机制。

配置源优先级(从高到低)
优先级 常量 配置源 说明
最高 (4) PriorityHighest ArgsPropertySource 命令行参数 --key=value
高 (3) PriorityHigh EnvPropertySource 环境变量(默认 GO_BOOT_ 前缀)
中 (2) PriorityNormal MapPropertySource 用户动态添加的配置源
中 (1) PriorityLow - 保留
最低 (0) PriorityLowest 应用配置源 application.jsonJSONPropertySource
快速开始
import "github.com/xudefa/enhance/config/environment"

env := environment.NewEnvironment()

// 获取属性值
port, ok := env.GetProperty("server.port")
name, ok := env.GetRequiredProperty("app.name")

// 类型安全获取
portInt := env.GetIntegerProperty("server.port", 8080)
enabled := env.GetBoolProperty("server.enabled", true)

// Profile 机制
env.AddActiveProfile("prod")
if env.AcceptsProfiles("prod") {
    // 生产环境逻辑
}

// 结构体绑定
type ServerConfig struct {
    Host string `enhance:"server.host"`
    Port int    `enhance:"server.port"`
}
var cfg ServerConfig
env.BindProperties(&cfg)

子包:refresh — 热重载机制

参考 Spring Cloud 的 @RefreshScope,实现配置变更时 Bean 的自动刷新。

核心特性
  • 代理模式 — 使用代理实现平滑切换,旧请求继续使用旧实例,新请求使用新实例
  • 延迟刷新 — Bean 消费者持有代理引用,代理内部在刷新标记被设置后重新创建目标实例
  • 事件驱动 — 统一的事件接口,支持多种配置源
  • 指标收集 — 内置刷新指标,监控刷新性能
快速开始
import (
    "github.com/xudefa/enhance/core"
    "github.com/xudefa/enhance/config/refresh"
)

// 创建刷新管理器
manager := refresh.NewRefreshScopeManager(beanCreator, logger,
    refresh.WithRefreshEnabled(true),
    refresh.WithRefreshDelay(100*time.Millisecond),
    refresh.WithMaxRefreshAttempts(3),
)

// 注册可刷新 Bean
manager.RegisterRefreshableBean("myService", myService)

// 标记 Bean 需要刷新(配置变更时调用)
manager.MarkBeanForRefresh("myService")

// 获取刷新后的 Bean
bean, err := manager.GetRefreshedBean("myService")
RefreshableBean 接口
type RefreshableBean interface {
    OnConfigChange(event refresh.ConfigChangeEvent) error
}

type MyService struct {
    config *Config
}

func (s *MyService) OnConfigChange(event refresh.ConfigChangeEvent) error {
    // 自定义配置变更处理逻辑
    s.config.Reload()
    return nil
}
配置变更事件
event := refresh.NewConfigChangeEvent(
    "modify",
    []string{"db.host", "db.port"},
    oldValues,
    newValues,
    "nacos",
)

使用示例

完整配置加载示例
package main

import (
    "fmt"
    "log"
    "github.com/xudefa/enhance/config"
)

func main() {
    // 创建配置
    cfg, err := config.New(
        func() (map[string]any, error) {
            return map[string]any{
                "app.name":    "my-app",
                "app.version": "1.0.0",
                "server.host": "localhost",
                "server.port": 8080,
            }, nil
        },
        config.WithConfigName("app"),
        config.WithConfigPath("./config"),
        config.WithConfigType("yaml"),
    )
    if err != nil {
        log.Fatal(err)
    }

    // 获取配置值
    fmt.Println("App Name:", cfg.GetString("app.name"))
    fmt.Println("Server Port:", cfg.GetInt("server.port"))

    // 结构体绑定
    type AppConfig struct {
        Name   string `mapstructure:"app.name"`
        Server struct {
            Host string `mapstructure:"server.host"`
            Port int    `mapstructure:"server.port"`
        } `mapstructure:",squash"`
    }
    
    var appCfg AppConfig
    if err := cfg.Unmarshal(&appCfg); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Config: %+v\n", appCfg)
}
热重载示例
// 注册配置变更监听
err := cfg.Watch(func(ev config.WatchEvent) {
    fmt.Printf("配置变更: %s %s = %v → %v\n",
        ev.Type, ev.Key, ev.OldValue, ev.NewValue)
    
    // 更新应用配置
    updateAppConfig(ev.Key, ev.NewValue)
})
if err != nil {
    log.Fatal(err)
}

// 应用退出时停止监听
defer cfg.StopWatch()

最佳实践

1. 使用结构体绑定替代手动获取
// ✅ 推荐:结构体绑定
type ServerConfig struct {
    Host string `mapstructure:"server.host"`
    Port int    `mapstructure:"server.port"`
}
var cfg ServerConfig
cfg.Unmarshal(&cfg)

// ⚠️ 不推荐:手动获取每个字段
host := cfg.GetString("server.host")
port := cfg.GetInt("server.port")
2. 合理使用配置源优先级
// ✅ 推荐:命令行参数覆盖配置文件
// 启动命令:./app --server.port=9090
// 优先级:命令行 > 环境变量 > 配置文件 > 默认值
3. 使用 Profile 区分环境
// ✅ 推荐:使用 Profile 区分环境
env := environment.NewEnvironment()
env.AddActiveProfile("prod")

// 加载 application-prod.json
// ⚠️ 不推荐:硬编码环境特定逻辑
if os.Getenv("ENV") == "prod" {
    // 生产环境逻辑
}
4. 热重载时注意线程安全
// ✅ 推荐:使用原子操作或互斥锁保护配置更新
type ConfigManager struct {
    mu     sync.RWMutex
    config *AppConfig
}

func (m *ConfigManager) Update(cfg *AppConfig) {
    m.mu.Lock()
    defer m.mu.Unlock()
    m.config = cfg
}

func (m *ConfigManager) Get() *AppConfig {
    m.mu.RLock()
    defer m.mu.RUnlock()
    return m.config
}

Documentation

Overview

Package config 提供配置管理功能,用于 enhance 框架。

该模块提供配置加载、绑定、验证、热更新等功能。 参考 Spring Boot 的配置管理体系设计。

架构设计

  • Config: 配置接口,提供统一的配置访问
  • Binder: 配置绑定器,支持结构体绑定
  • Validator: 配置验证器接口
  • WatchManager: 配置热重载管理器
  • WatchEvent: 配置变更事件
  • WatchCallback: 配置变更回调函数类型
  • TypeConverter: 类型转换函数类型
  • ValidationError: 单个验证错误
  • ValidationErrors: 验证错误集合
  • ValidationRule: 验证规则

核心功能

  • 配置加载: 支持 JSON、YAML 等多种格式
  • 配置绑定: 支持结构体自动绑定
  • 配置验证: 支持配置项验证
  • 热更新: 支持配置变更监听和自动刷新
  • 环境变量: 支持环境变量覆盖

使用方式

加载配置:

cfg := config.NewConfig("application.json")

绑定到结构体:

type AppConfig struct {
    Port int    `config:"server.port"`
    Name string `config:"app.name"`
}

var appCfg AppConfig
cfg.Bind(&appCfg)

监听配置变更:

cfg.Watch(func(key string, value any) {
    fmt.Printf("Config changed: %s = %v\n", key, value)
})

配置优先级

配置加载优先级(从高到低):

  • 命令行参数
  • 环境变量
  • 配置文件
  • 默认值

Index

Constants

View Source
const (
	EventModify = "modify" // 配置修改
	EventDelete = "delete" // 配置删除
	EventCreate = "create" // 配置创建
)

热重载事件类型常量。

Variables

This section is empty.

Functions

func Bind

func Bind(cfg any, target any) error

Bind 将配置数据绑定到结构体

支持以下特性:

  • env 标签:从扁平配置键映射到结构体字段
  • 复杂类型自动转换:Duration、[]string、map[string]string 等
  • 嵌套结构体:自动递归绑定嵌套字段
  • validate 标签:集成验证规则(required、min、max 等)

参数:

  • cfg: 配置数据源(Config 接口或 map[string]any)
  • target: 目标结构体指针

返回:

  • error: 绑定或验证错误

func BindProperties

func BindProperties(target any, env *environment.Environment, opts ...BindOption) error

BindProperties 便捷函数:将配置绑定到目标结构体

func RegisterConverter

func RegisterConverter(target any, fn TypeConverter)

RegisterConverter 注册自定义类型转换器

func Validate

func Validate(target any) error

Validate 根据 validate 标签验证结构体字段

支持的验证规则:

  • required: 字段不能为空
  • min=N: 数值字段最小值,或字符串最小长度
  • max=N: 数值字段最大值,或字符串最大长度
  • enum=a,b,c: 枚举值限制

参数:

  • target: 目标结构体指针

返回:

  • error: 验证错误

func Watch

func Watch(key string, callback WatchCallback) error

Watch 注册配置变更监听器。

当指定 key 的配置值发生变化时,触发回调函数。

示例:

config.Watch("database.url", func(event config.WatchEvent) {
    log.Printf("配置变更: %s -> %v", event.Key, event.Value)
})

func WithDataID

func WithDataID(dataID string) func(*ConfigCenterConfig)

WithDataID 设置配置中心的数据 ID(Nacos 使用)。

func WithFormat

func WithFormat(format string) func(*ConfigCenterConfig)

WithFormat 设置配置中心的前缀(Etcd/Consul 使用)。

func WithGroup

func WithGroup(group string) func(*ConfigCenterConfig)

WithGroup 设置配置中心的分组(Nacos 使用)。

func WithProfiles

func WithProfiles(profiles []string) func(*ConfigCenterConfig)

WithProfiles 设置配置中心的命名空间(将 Profile 列表以逗号连接)。

Types

type BindOption

type BindOption func(*PropertyBinder)

BindOption 绑定选项

func WithBindPrefix

func WithBindPrefix(prefix string) BindOption

WithBindPrefix 设置绑定前缀

func WithBindValidator

func WithBindValidator(v Validator) BindOption

WithBindValidator 设置验证器

type Config

type Config interface {
	// Get 获取指定键的原始值
	Get(key string) any
	// GetString 获取字符串值,类型不匹配时返回空字符串
	GetString(key string) string
	// GetInt 获取整数值,类型不匹配时返回 0
	GetInt(key string) int
	// GetBool 获取布尔值,类型不匹配时返回 false
	GetBool(key string) bool
	// GetAll 获取所有配置项的副本
	GetAll() map[string]any
	// Set 设置配置值
	Set(key string, value any)
	// Load 从 JSON 文件加载配置
	Load(path string) error
	// Save 保存配置到 JSON 文件
	Save(path string) error
}

Config 配置接口。

提供统一的配置访问和管理功能。 支持多种数据类型(字符串、整数、布尔值等), 以及配置的加载和持久化。

使用示例

cfg := config.NewConfig()
cfg.Set("app.name", "my-app")
cfg.Set("server.port", 8080)
name := cfg.GetString("app.name")
port := cfg.GetInt("server.port")

func NewConfig

func NewConfig() Config

NewConfig 创建配置实例。

type ConfigBuilder

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

ConfigBuilder 配置构建器,支持链式配置和便捷加载

func NewConfigBuilder

func NewConfigBuilder() *ConfigBuilder

NewConfigBuilder 创建配置构建器

func (*ConfigBuilder) AutoEnv

func (b *ConfigBuilder) AutoEnv() *ConfigBuilder

AutoEnv 自动检测环境变量

func (*ConfigBuilder) Build

func (b *ConfigBuilder) Build() (*ConfigModel, error)

Build 构建配置模型

func (*ConfigBuilder) BuildAndLoad

func (b *ConfigBuilder) BuildAndLoad() (*ConfigModel, error)

BuildAndLoad 构建并加载配置

func (*ConfigBuilder) EnvPrefix

func (b *ConfigBuilder) EnvPrefix(prefix string) *ConfigBuilder

EnvPrefix 设置环境变量前缀

func (*ConfigBuilder) Environment

func (b *ConfigBuilder) Environment(env string) *ConfigBuilder

Environment 设置环境

func (*ConfigBuilder) File

func (b *ConfigBuilder) File(path string) *ConfigBuilder

File 设置配置文件完整路径

func (*ConfigBuilder) Loader

func (b *ConfigBuilder) Loader(loader Loader, opts ...LoaderOption) *ConfigBuilder

Loader 设置加载器

func (*ConfigBuilder) Name

func (b *ConfigBuilder) Name(name string) *ConfigBuilder

Name 设置配置文件名

func (*ConfigBuilder) Paths

func (b *ConfigBuilder) Paths(paths ...string) *ConfigBuilder

Paths 设置配置搜索路径

func (*ConfigBuilder) Type

func (b *ConfigBuilder) Type(typeName string) *ConfigBuilder

Type 设置配置类型

func (*ConfigBuilder) Validator

func (b *ConfigBuilder) Validator(v Validator) *ConfigBuilder

Validator 设置验证器

type ConfigCenter

type ConfigCenter interface {
	Load() (ConfigData, error)
	Watch(key string, callback func(ConfigData)) error
	Close() error
}

ConfigCenter 配置中心接口。

定义远程配置的加载、监听和关闭行为。

type ConfigCenterConfig

type ConfigCenterConfig struct {
	Endpoints []string
	Namespace string
	Timeout   time.Duration
	DataID    string
	Group     string
	Prefix    string
}

ConfigCenterConfig 配置中心连接配置。

func WithRemoteSource

func WithRemoteSource(centerType string, endpoints []string, opts ...func(*ConfigCenterConfig)) *ConfigCenterConfig

WithRemoteSource 创建配置中心配置

便捷函数,用于创建 ConfigCenterConfig 实例。

参数:

  • centerType: 配置中心类型 (nacos/etcd/consul)
  • endpoints: 配置中心地址列表
  • opts: 可选的配置中心选项

示例:

cfg := config.WithRemoteSource("nacos", []string{"127.0.0.1:8848"},
    config.WithDataID("app-config"),
    config.WithGroup("DEFAULT_GROUP"),
)

cfg := config.WithRemoteSource("etcd", []string{"127.0.0.1:2379"},
    config.WithFormat("/config/myapp/"),
)

type ConfigData

type ConfigData map[string]any

ConfigData 配置数据,键值对形式存储从配置中心加载的配置项。

type ConfigModel

type ConfigModel struct {
	ConfigName  string
	ConfigFile  string
	ConfigPaths []string
	ConfigType  string
	Env         string
	OptionName  string
	Config      map[string]any
}

ConfigModel 配置模型。

存储配置构建的所有参数和最终配置数据。

func New

func New(load func(*ConfigModel) error, opts ...ConfigOption) (*ConfigModel, error)

New 创建配置模型。

type ConfigOption

type ConfigOption func(*ConfigModel)

ConfigOption 配置选项函数类型。

func WithConfigFile

func WithConfigFile(path string) ConfigOption

WithConfigFile 设置配置文件路径。

func WithConfigName

func WithConfigName(name string) ConfigOption

WithConfigName 设置配置名称。

func WithConfigPath

func WithConfigPath(paths ...string) ConfigOption

WithConfigPath 设置配置搜索路径。

func WithConfigType

func WithConfigType(typeName string) ConfigOption

WithConfigType 设置配置类型。

func WithEnvVariable

func WithEnvVariable(prefix string) ConfigOption

WithEnvVariable 设置环境变量前缀。

func WithEnvironment

func WithEnvironment(env string) ConfigOption

WithEnvironment 设置环境。

type ConfigWatcher

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

ConfigWatcher 配置监听器,简化热重载使用

func NewConfigWatcher

func NewConfigWatcher() *ConfigWatcher

NewConfigWatcher 创建配置监听器

func (*ConfigWatcher) Close

func (w *ConfigWatcher) Close()

Close 关闭监听器

func (*ConfigWatcher) Manager

func (w *ConfigWatcher) Manager() *WatchManager

Manager 获取底层管理器

func (*ConfigWatcher) Notify

func (w *ConfigWatcher) Notify(event WatchEvent)

Notify 通知配置变更

func (*ConfigWatcher) OnChange

func (w *ConfigWatcher) OnChange(key string, callback func(event WatchEvent))

OnChange 注册配置变更回调

func (*ConfigWatcher) Remove

func (w *ConfigWatcher) Remove(key string)

Remove 取消监听

type DefaultValidator

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

DefaultValidator 默认验证器实现。

func NewValidator

func NewValidator() *DefaultValidator

NewValidator 创建默认验证器

func (*DefaultValidator) AddCustomRule

func (v *DefaultValidator) AddCustomRule(field string, fn func(any) error)

AddCustomRule 添加自定义验证规则

func (*DefaultValidator) AddEnum

func (v *DefaultValidator) AddEnum(field string, values ...any)

AddEnum 添加枚举值验证

func (*DefaultValidator) AddMax

func (v *DefaultValidator) AddMax(field string, max int)

AddMax 添加最大值验证

func (*DefaultValidator) AddMin

func (v *DefaultValidator) AddMin(field string, min int)

AddMin 添加最小值验证

func (*DefaultValidator) AddRegex

func (v *DefaultValidator) AddRegex(field, pattern string)

AddRegex 添加正则表达式验证

func (*DefaultValidator) AddRequired

func (v *DefaultValidator) AddRequired(fields ...string)

AddRequired 添加必填字段验证

func (*DefaultValidator) Validate

func (v *DefaultValidator) Validate(data map[string]any) error

Validate 验证配置数据

type Loader

type Loader interface {
	Load(opts ...LoaderOption) (Config, error)
	Priority() int
	Name() string
	SupportsWatch() bool
}

Loader 配置加载器接口。

定义配置加载的统一方式,用于支持多种配置源。

type LoaderChain

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

LoaderChain 配置加载器链.

用于管理多个加载器,并按优先级排序.

func (*LoaderChain) Add

func (c *LoaderChain) Add(loader Loader)

Add 添加加载器到链中

参数:

  • loader: 配置加载器实例

func (*LoaderChain) Len

func (c *LoaderChain) Len() int

Len 返回加载器数量

实现 sort.Interface 接口,用于按优先级排序。

返回:

  • int: 加载器数量

func (*LoaderChain) Less

func (c *LoaderChain) Less(i, j int) bool

Less 比较两个加载器的优先级

实现 sort.Interface 接口,优先级数值越小的加载器排在越前面。

参数:

  • i: 第一个加载器索引
  • j: 第二个加载器索引

返回:

  • bool: i 的优先级是否低于 j

func (*LoaderChain) Sorted

func (c *LoaderChain) Sorted() []Loader

Sorted 返回按优先级排序的加载器列表.

func (*LoaderChain) Swap

func (c *LoaderChain) Swap(i, j int)

Swap 交换两个加载器位置

实现 sort.Interface 接口。

参数:

  • i: 第一个加载器索引
  • j: 第二个加载器索引

type LoaderModel

type LoaderModel struct {
	Paths      []string
	FileName   string
	FileType   string
	Env        string
	Prefix     string
	RemoteType string
	Endpoints  []string
	Key        string
}

LoaderModel 配置加载器模型结构体。

type LoaderOption

type LoaderOption func(*LoaderModel) error

LoaderOption 配置加载器选项函数类型。

func WithEndpoints

func WithEndpoints(endpoints []string) LoaderOption

WithEndpoints 设置远程配置端点选项.

参数:

  • endpoints: 端点地址列表

返回:

  • LoaderOption: 加载器选项函数

func WithFileName

func WithFileName(name string) LoaderOption

WithFileName 设置文件名选项.

参数:

  • name: 文件名

返回:

  • LoaderOption: 加载器选项函数

func WithLoaderEnv

func WithLoaderEnv(env string) LoaderOption

WithLoaderEnv 设置环境选项.

参数:

  • env: 环境名称

返回:

  • LoaderOption: 加载器选项函数

func WithLoaderFileType

func WithLoaderFileType(fileType string) LoaderOption

WithLoaderFileType 设置文件类型选项.

参数:

  • fileType: 文件类型,如 json

返回:

  • LoaderOption: 加载器选项函数

func WithLoaderKey

func WithLoaderKey(key string) LoaderOption

WithLoaderKey 设置配置键选项.

参数:

  • key: 配置键

返回:

  • LoaderOption: 加载器选项函数

func WithPaths

func WithPaths(paths ...string) LoaderOption

WithPaths 设置配置搜索路径选项.

参数:

  • paths: 搜索路径列表

返回:

  • LoaderOption: 加载器选项函数

func WithPrefix

func WithPrefix(prefix string) LoaderOption

WithPrefix 设置环境变量前缀选项.

参数:

  • prefix: 环境变量前缀

返回:

  • LoaderOption: 加载器选项函数

func WithRemoteType

func WithRemoteType(remoteType string) LoaderOption

WithRemoteType 设置远程配置类型选项.

参数:

  • remoteType: 远程配置类型,如 etcd, consul, apollo

返回:

  • LoaderOption: 加载器选项函数

type PropertyBinder

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

PropertyBinder 配置属性绑定器

将 Environment 中的配置值绑定到结构体字段。 支持嵌套结构体、切片、映射和自定义类型转换。

func NewPropertyBinder

func NewPropertyBinder(env *environment.Environment) *PropertyBinder

NewPropertyBinder 创建配置属性绑定器

func (*PropertyBinder) Bind

func (b *PropertyBinder) Bind(target any) error

Bind 将配置绑定到目标结构体

参数:

  • target: 目标结构体指针

返回:

  • error: 绑定错误

func (*PropertyBinder) WithPrefix

func (b *PropertyBinder) WithPrefix(prefix string) *PropertyBinder

WithPrefix 设置配置前缀

func (*PropertyBinder) WithValidator

func (b *PropertyBinder) WithValidator(v Validator) *PropertyBinder

WithValidator 设置验证器

type TypeConverter

type TypeConverter func(string) (any, error)

TypeConverter 类型转换函数类型

func GetConverter

func GetConverter(target reflect.Type) (TypeConverter, bool)

GetConverter 获取指定类型的转换器

type ValidationError

type ValidationError struct {
	Field   string
	Message string
}

ValidationError 单个验证错误。

func (ValidationError) Error

func (e ValidationError) Error() string

Error 实现 error 接口。

type ValidationErrors

type ValidationErrors []ValidationError

ValidationErrors 验证错误集合。

func (ValidationErrors) Error

func (e ValidationErrors) Error() string

Error 实现 error 接口。

type ValidationRule

type ValidationRule struct {
	Field string
	Check func(value any) error
}

ValidationRule 验证规则。

type ValidationRuleBuilder

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

ValidationRuleBuilder 验证规则构建器

func NewValidationRuleBuilder

func NewValidationRuleBuilder() *ValidationRuleBuilder

NewValidationRuleBuilder 创建验证规则构建器

func (*ValidationRuleBuilder) Build

func (b *ValidationRuleBuilder) Build() Validator

Build 构建验证器

func (*ValidationRuleBuilder) Custom

func (b *ValidationRuleBuilder) Custom(field string, fn func(any) error) *ValidationRuleBuilder

Custom 添加自定义规则

func (*ValidationRuleBuilder) Enum

func (b *ValidationRuleBuilder) Enum(field string, values ...any) *ValidationRuleBuilder

Enum 添加枚举值

func (*ValidationRuleBuilder) Max

Max 添加最大值限制

func (*ValidationRuleBuilder) Min

Min 添加最小值限制

func (*ValidationRuleBuilder) Regex

func (b *ValidationRuleBuilder) Regex(field, pattern string) *ValidationRuleBuilder

Regex 添加正则表达式

func (*ValidationRuleBuilder) Required

func (b *ValidationRuleBuilder) Required(fields ...string) *ValidationRuleBuilder

Required 添加必填字段

type Validator

type Validator interface {
	// Validate 验证配置
	Validate(data map[string]any) error
}

Validator 配置验证器接口。

用于在配置绑定后验证配置值的合法性。

type WatchCallback

type WatchCallback func(event WatchEvent)

WatchCallback 配置变更回调函数类型。

type WatchEvent

type WatchEvent struct {
	Type      string    // modify, delete, create
	Key       string    // 配置键
	Value     any       // 配置值
	Timestamp time.Time // 事件时间
	Source    string    // 事件来源
}

WatchEvent 配置变更事件。

func NewWatchEvent

func NewWatchEvent(eventType, key string, value any, source string) WatchEvent

NewWatchEvent 创建配置变更事件。

type WatchManager

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

WatchManager 配置热重载管理器。

管理配置变更的监听和通知。

func NewWatchManager

func NewWatchManager() *WatchManager

NewWatchManager 创建热重载管理器实例。

返回:

  • *WatchManager: 管理器实例

func (*WatchManager) AddSource

func (m *WatchManager) AddSource(name string, ch chan WatchEvent)

AddSource 添加配置源.

参数:

  • name: 配置源名称
  • ch: 事件通道

func (*WatchManager) Close

func (m *WatchManager) Close()

Close 关闭热重载管理器.

func (*WatchManager) GetSource

func (m *WatchManager) GetSource(name string) (chan WatchEvent, bool)

GetSource 获取配置源.

参数:

  • name: 配置源名称

返回:

  • chan WatchEvent: 事件通道
  • bool: 是否存在

func (*WatchManager) Notify

func (m *WatchManager) Notify(event WatchEvent)

Notify 通知所有监听器配置变更.

参数:

  • event: 变更事件

func (*WatchManager) Register

func (m *WatchManager) Register(key string, callback func(WatchEvent))

Register 注册配置变更监听器.

参数:

  • key: 监听器标识
  • callback: 回调函数

func (*WatchManager) Unregister

func (m *WatchManager) Unregister(key string)

Unregister 取消配置变更监听.

参数:

  • key: 监听器标识

Directories

Path Synopsis
Package environment 提供环境配置管理功能,用于 enhance 框架。
Package environment 提供环境配置管理功能,用于 enhance 框架。
Package refresh 提供配置刷新功能,用于 enhance 框架。
Package refresh 提供配置刷新功能,用于 enhance 框架。

Jump to

Keyboard shortcuts

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