sysconf

package module
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Dec 31, 2025 License: MIT Imports: 27 Imported by: 0

README

Sysconf - Go配置管理库

Go Reference Go Report Card MIT License Go Version

Sysconf 是一个高性能、线程安全的Go配置管理库,专为企业级应用设计。采用原子存储技术和智能验证系统,提供可靠的并发访问支持。

✨ 核心特性

🚀 性能与安全
  • ⚡ 高性能: 微秒级配置读取,毫秒级写入
  • 🔒 线程安全: 基于 atomic.Value + sync.RWMutex 实现并发安全
  • 📊 并发支持: 经过严格并发测试,支持高并发场景
  • 💾 智能缓存: 原子存储配合缓存机制,优化读取性能
🔧 配置管理
  • 多格式支持: YAML, JSON, TOML, Dotenv, ENV 等
  • 类型安全: 智能类型转换和泛型API,编译时类型检查
  • 结构体映射: 支持复杂嵌套结构和标签验证
  • 默认值系统: 灵活的默认值设置和回退机制
🛡️ 企业级特性
  • 智能验证系统: 字段级验证,30+种内置规则,简化调用逻辑
  • 动态验证器匹配: 消除硬编码,验证器自动推断支持字段
  • 热重载: 防抖动文件监控,支持配置实时更新
  • 高级加密: ChaCha20-Poly1305认证加密,支持自定义加密器
🌐 生态集成
  • 环境变量: 智能大小写匹配,支持前缀和嵌套结构
  • 命令行集成: 完整的 pflag/cobra 支持,企业级CLI应用友好
  • Viper兼容: 完全兼容现有viper生态,无缝迁移

📦 安装

go get github.com/darkit/sysconf

系统要求: Go 1.23+

🚀 快速开始

基础使用
package main

import (
    "log"
    "time"
    
    "github.com/darkit/sysconf"
    "github.com/darkit/sysconf/validation"
)

func main() {
    // 创建高性能、线程安全的配置实例
    cfg, err := sysconf.New(
        sysconf.WithContent(defaultConfig),    // 默认配置内容
        sysconf.WithPath("configs"),           // 配置文件目录
        sysconf.WithName("app"),               // 配置文件名
        sysconf.WithMode("yaml"),              // 配置格式
    )
    if err != nil {
        log.Fatal("创建配置失败:", err)
    }

    // 类型安全的配置读取(完全线程安全)
    host := cfg.GetString("database.host", "localhost")
    port := cfg.GetInt("database.port", "5432")
    debug := cfg.GetBool("app.debug", "false")
    timeout := cfg.GetDuration("database.timeout")
    
    log.Printf("数据库连接: %s:%d", host, port)
    
    // 高并发场景演示 - 无竞态条件
    go func() {
        for i := 0; i < 1000; i++ {
            cfg.Set(fmt.Sprintf("dynamic.key%d", i), fmt.Sprintf("value%d", i))
        }
    }()
    
    go func() {
        for i := 0; i < 1000; i++ {
            _ = cfg.GetString("database.host")
        }
    }()
    
    log.Println("✅ 高并发操作完成,无任何竞态条件")
}

const defaultConfig = `
app:
  name: "MyApp"
  version: "1.0.0"
  debug: false

database:
  host: "localhost"
  port: 5432
  timeout: "30s"

server:
  features: ["http", "grpc", "websocket"]
  ports: [8080, 8443]
`
企业级验证系统
// 集成智能验证器系统
cfg, err := sysconf.New(
    sysconf.WithContent(defaultConfig),
    sysconf.WithValidators(
        validation.NewDatabaseValidator(),  // 数据库配置验证
        validation.NewWebServerValidator(), // Web服务器配置验证
        validation.NewRedisValidator(),     // Redis配置验证
    ),
)

// 配置设置时自动进行字段级验证
cfg.Set("server.port", 8080)     // ✅ 有效端口
cfg.Set("server.port", 70000)    // ❌ 被验证器拦截
cfg.Set("database.host", "localhost") // ✅ 有效主机名
类型安全的泛型API
// 🆕 现代化泛型API,编译时类型安全
host := GetAs[string](cfg, "database.host", "localhost")
port := GetAs[int](cfg, "database.port", 5432)
timeout := GetAs[time.Duration](cfg, "timeout", 30*time.Second)
apiKey := MustGetAs[string](cfg, "api.secret_key") // 缺失或转换失败时 panic

// 泛型切片支持
features := GetSliceAs[string](cfg, "server.features")
ports := GetSliceAs[int](cfg, "server.ports")
MustGetAs[T] - 强制获取(新增)

获取配置值并转换为指定类型,失败时 panic。适用于强制必填配置项。

apiKey := sysconf.MustGetAs[string](cfg, "api.secret_key")  // 缺失或转换失败时 panic
port := sysconf.MustGetAs[int](cfg, "server.port")
结构体映射
// 定义配置结构体
type AppConfig struct {
    App struct {
        Name    string `config:"name" default:"MyApp" validate:"required,min=1"`
        Version string `config:"version" default:"1.0.0" validate:"required,semver"`
        Env     string `config:"env" default:"development" validate:"required,oneof=development test prod"`
    } `config:"app"`

    Database struct {
        Host     string        `config:"host" default:"localhost" validate:"required,hostname_rfc1123"`
        Port     int           `config:"port" default:"5432" validate:"required,min=1,max=65535"`
        Username string        `config:"username" default:"postgres" validate:"required,min=1"`
        Password string        `config:"password" validate:"required,min=1"`
        Timeout  time.Duration `config:"timeout" default:"30s" validate:"required"`
        MaxConns int           `config:"max_conns" default:"10" validate:"min=1,max=100"`
    } `config:"database"`
}

func main() {
    cfg, _ := sysconf.New(/* 配置选项 */)
    
    var config AppConfig
    if err := cfg.Unmarshal(&config); err != nil {
        log.Fatal("配置解析失败:", err)
    }
    
    // 类型安全的配置访问
    fmt.Printf("应用: %s v%s\n", config.App.Name, config.App.Version)
    fmt.Printf("数据库: %s:%d\n", config.Database.Host, config.Database.Port)
}

📊 性能特性

技术实现

原子存储架构:

type Config struct {
    // 核心数据存储 - 使用atomic.Value实现无锁读取
    data atomic.Value // 存储map[string]any
    
    // 并发控制
    mu sync.RWMutex // 保护元数据和写操作
}

// 无锁高性能读取
func (c *Config) loadData() map[string]any {
    if data := c.data.Load(); data != nil {
        return data.(map[string]any)
    }
    return make(map[string]any)
}

并发测试验证:

  • 支持多协程并发读写
  • 通过 race detector 测试
  • 稳定的性能表现

🛡️ 智能验证系统

字段级智能验证

支持精细化的字段级验证机制:

// 🆕 字段级智能验证特性
func (c *Config) validateSingleField(key string, value any) error {
    // 只验证相关的验证器和字段
    for _, validator := range validators {
        if !c.validatorSupportsField(validator, key) {
            continue // 跳过不相关的验证器
        }
        
        // 执行单字段验证,跳过required检查避免级联失败
        if err := c.validateField(validator, key, value); err != nil {
            return err
        }
    }
}
动态验证器匹配

验证器自动推断支持字段:

// 🆕 动态字段检查
func (c *Config) validatorSupportsField(validator ConfigValidator, key string) bool {
    if structValidator, ok := validator.(*validation.StructuredValidator); ok {
        supportedFields := structValidator.GetSupportedFields()
        for _, supportedField := range supportedFields {
            if supportedField == fieldGroup {
                return true
            }
        }
    }
    return false
}

// 验证器自动推断支持的字段
func (r *StructuredValidator) GetSupportedFields() []string {
    fieldPrefixes := make(map[string]bool)
    
    // 从规则中自动提取字段前缀
    for key := range r.rules {
        if prefix := extractFieldPrefix(key); prefix != "" {
            fieldPrefixes[prefix] = true
        }
    }
    
    return prefixes
}
预定义验证器

提供6种企业级预定义验证器,开箱即用:

// 数据库配置验证器
validator := validation.NewDatabaseValidator()
// 验证:主机名、端口范围、用户名、密码、数据库类型等

// Web服务器验证器
validator := validation.NewWebServerValidator()  
// 验证:服务器配置、SSL设置、运行模式等

// Redis验证器
validator := validation.NewRedisValidator()
// 验证:Redis连接、数据库索引、地址列表等

// 邮件配置验证器
validator := validation.NewEmailValidator()
// 验证:SMTP配置、邮箱格式、认证设置等

// API配置验证器  
validator := validation.NewAPIValidator()
// 验证:API端点、认证密钥、超时设置等

// 日志配置验证器
validator := validation.NewLogValidator()
// 验证:日志级别、输出格式、文件路径等
支持的验证规则

30+种内置验证规则:

  • 网络相关: email, url, ipv4, ipv6, hostname, port
  • 数据格式: json, uuid, base64, regex, alphanum
  • 数值范围: range:1,100, length:5,20, min:1, max:100
  • 业务规则: creditcard, phonenumber, datetime, timezone
  • 枚举验证: enum:apple,banana,orange
  • 必填验证: required (智能处理,避免级联失败)

🔐 高级加密功能

ChaCha20-Poly1305 认证加密

内置高性能认证加密算法,提供企业级数据保护:

// 轻量级加密(推荐入门)
cfg, err := sysconf.New(
    sysconf.WithPath("configs"),
    sysconf.WithName("app"),
    sysconf.WithEncryption("your-secret-password"), // 🔐 启用加密
    sysconf.WithContent(defaultConfig),
)

// 敏感配置自动加密存储
cfg.Set("database.password", "super-secret-password")
cfg.Set("api.secret_key", "sk-1234567890abcdef")

// 读取时自动解密
dbPassword := cfg.GetString("database.password")
apiKey := cfg.GetString("api.secret_key")
自定义加密器

支持企业级自定义加密需求:

// 自定义加密器接口
type ConfigCrypto interface {
    Encrypt(data []byte) ([]byte, error)
    Decrypt(data []byte) ([]byte, error)
    IsEncrypted(data []byte) bool
}

// 使用自定义加密器
customCrypto := &YourAESGCMCrypto{key: []byte("your-key")}
cfg, err := sysconf.New(
    sysconf.WithEncryptionCrypto(customCrypto),
)

加密算法特性:

  • ChaCha20-Poly1305: 高性能认证加密
  • 抗侧信道攻击: 移动设备友好
  • 完整性验证: AEAD提供机密性和完整性
  • 性能优化: 软件实现比AES更快更安全

🌐 环境变量与命令行集成

智能大小写匹配

支持多种环境变量格式,用户友好:

// 启用智能大小写匹配
cfg, err := sysconf.New(
    sysconf.WithEnv("APP"),  // 自动启用智能匹配
)

支持的环境变量格式:

# 🆕 智能大小写匹配 - 全部支持
app_database_host=localhost    # ✅ 小写(用户友好)  
APP_DATABASE_HOST=localhost    # ✅ 大写格式
App_Database_Host=localhost    # ✅ 混合大小写
database_port=5432             # ✅ 无前缀小写
DATABASE_OPTIONS_SSL_MODE=require  # ✅ 大写格式
Cobra/PFlag 完整集成

企业级CLI应用的完美选择:

import (
    "github.com/spf13/cobra"
    "github.com/spf13/pflag"
    "github.com/darkit/sysconf"
)

func main() {
    // 创建cobra命令
    var rootCmd = &cobra.Command{
        Use: "myapp",
        Run: func(cmd *cobra.Command, args []string) {
            // 创建配置实例,集成pflag
            cfg, err := sysconf.New(
                sysconf.WithPath("configs"),
                sysconf.WithName("app"), 
                sysconf.WithPFlags(cmd.Flags()), // 🆕 完整pflag集成
                sysconf.WithEnv("MYAPP"),
            )
            
            // 命令行参数自动覆盖配置文件
            host := cfg.GetString("host") // 来自 --host 参数或配置文件
            port := cfg.GetInt("port")    // 来自 --port 参数或配置文件
        },
    }
    
    // 定义命令行参数
    rootCmd.Flags().String("host", "", "Database host")
    rootCmd.Flags().Int("port", 5432, "Database port")
    
    rootCmd.Execute()
}

优先级顺序: 命令行参数 > 环境变量 > 配置文件 > 默认值

🔄 配置热重载

防抖动的智能文件监控:

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

stop := cfg.WatchWithContext(ctx, func() {
    log.Println("配置文件已更新")

    var newConfig AppConfig
    if err := cfg.Unmarshal(&newConfig); err != nil {
        log.Printf("配置重载失败: %v", err)
        return
    }

    updateApplication(&newConfig)
})

// 在需要时显式停止监听
stop()

热重载特性:

  • 防抖机制: 1秒内多次变更只触发一次
  • 并发安全: 配置更新期间服务不中断
  • 错误恢复: 配置验证失败时自动回滚
  • 智能监控: 只监控实际的文件写入操作
  • 可控监听: 使用 WatchWithContext 可在需要时取消监听

需要显式关闭热重载时,可调用 cancel := cfg.WatchWithContext(ctx, callbacks...) 并在退出流程中执行 cancel()

⚙️ 调优选项

cfg, err := sysconf.New(
    sysconf.WithWriteFlushDelay(500*time.Millisecond), // 调整写入延迟,0 表示立即写入
    sysconf.WithCacheTiming(0, 100*time.Millisecond),  // 控制缓存预热与重建延迟
)
  • WithWriteFlushDelay: 自定义配置文件写入延迟,满足不同持久化需求。
  • WithCacheTiming: 配置读取缓存的预热和重建间隔,避免固定魔术数字。
  • WithEnvOptions: 启用 SmartCase 后环境变量键会被缓存,多种大小写/前缀只需解析一次。
  • 防御性写入: 对 map/slice 自动深拷贝,外部修改不会污染内部状态,可配合示例中的 parent.child 演示验证。

将延迟设为 0 或负值可禁用等待,实时刷新缓存或直接写入文件。

🛡 防御性写入机制

  • Set 操作会对 map、slice 做深拷贝,防止调用方后续修改原始数据污染内部状态。
  • 嵌套结构会自动展开为扁平键,配合缓存失效保证每次读取都是一致数据。
  • 示例 examples/main.go 展示了设置 parent.child 后继续修改原始 map,读取结果仍保持 "原始值"。

📝 配置文件格式

YAML (推荐)
# 应用基础配置
app:
  name: "MyApp"
  version: "1.0.0"
  env: "production"

# 服务器配置
server:
  host: "0.0.0.0"
  port: 8080
  timeout: "30s"
  features:
    - http
    - grpc
    - websocket

# 数据库配置  
database:
  host: "localhost"
  port: 5432
  username: "postgres"
  password: "secret123"  # 可通过环境变量覆盖:export APP_DATABASE_PASSWORD=newpassword
  timeout: "30s"
  max_conns: 10
  options:
    ssl_mode: "require"
    timezone: "UTC"
JSON
{
  "app": {
    "name": "MyApp",
    "version": "1.0.0",
    "env": "production"
  },
  "database": {
    "host": "localhost", 
    "port": 5432,
    "timeout": "30s"
  }
}
TOML
[app]
name = "MyApp"
version = "1.0.0"
env = "production"

[database]
host = "localhost"
port = 5432
timeout = "30s"

[server]
features = ["http", "grpc", "websocket"]
Dotenv
APP_NAME=MyApp
APP_VERSION=1.0.0
DATABASE_HOST=localhost
DATABASE_PORT=5432

📚 详细API指南

基础类型获取
// 字符串类型(支持默认值)
host := cfg.GetString("database.host", "localhost")
host := cfg.GetString("database", "host", "localhost")  // 多参数形式

// 数值类型
port := cfg.GetInt("database.port", "5432")
weight := cfg.GetFloat("metrics.weight", "0.95")

// 布尔类型
debug := cfg.GetBool("app.debug", "true")

// 通用类型
value := cfg.Get("any.key", "default_value")
时间和持续时间
// 时间持续时间(支持 "30s", "5m", "1h" 等)
timeout := cfg.GetDuration("database.timeout")

// 时间类型
timestamp := cfg.GetTime("app.created_at")
切片类型
// 字符串切片
features := cfg.GetStringSlice("server.features")

// 数值切片
ports := cfg.GetIntSlice("server.ports")  
weights := cfg.GetFloatSlice("analytics.weights")

// 布尔切片
flags := cfg.GetBoolSlice("feature.flags")
映射类型
// 通用映射
options := cfg.GetStringMap("database.options")  // map[string]interface{}

// 字符串映射
params := cfg.GetStringMapString("http.headers")  // map[string]string
泛型API (推荐)
// 🆕 类型安全的泛型获取
host := GetAs[string](cfg, "database.host", "localhost")
port := GetAs[int](cfg, "database.port", 5432)
timeout := GetAs[time.Duration](cfg, "timeout", 30*time.Second)

// 🆕 泛型切片
features := GetSliceAs[string](cfg, "server.features")
ports := GetSliceAs[int](cfg, "server.ports")

// 🆕 必须存在的配置(不存在则panic)
apiKey := MustGetAs[string](cfg, "api.secret_key")

// 🆕 支持多个fallback键
port := GetWithFallback[int](cfg, "server.port", "app.port", "port")

🔧 高级配置选项

配置选项详解
cfg, err := sysconf.New(
    // 基础选项
    sysconf.WithPath("configs"),              // 配置文件目录
    sysconf.WithMode("yaml"),                 // 配置格式
    sysconf.WithName("app"),                  // 配置文件名
    
    // 默认配置
    sysconf.WithContent(defaultConfig),       // 默认配置内容
    
    // 环境变量配置
    sysconf.WithEnv("APP"),                   // 便利函数:启用智能大小写匹配
    
    // 或完整配置(高级用法)
    sysconf.WithEnvOptions(sysconf.EnvOptions{
        Prefix:    "APP",     // 环境变量前缀
        Enabled:   true,      // 启用环境变量覆盖
        SmartCase: true,      // 启用智能大小写匹配
    }),
    
    // 验证器配置
    sysconf.WithValidators(
        validation.NewDatabaseValidator(),
        validation.NewWebServerValidator(),
    ),
    
    // 加密配置
    sysconf.WithEncryption("secret-password"), // 启用加密
    
    // 命令行集成
    sysconf.WithPFlags(cmd.Flags()),           // Cobra集成
)
配置更新
// 更新单个配置项(自动验证)
if err := cfg.Set("database.host", "new-host"); err != nil {
    log.Printf("配置更新失败: %v", err)
}

// 批量更新(推荐)
updates := map[string]interface{}{
    "database.host": "new-host",
    "database.port": 5433,
    "server.debug":  true,
}

for key, value := range updates {
    if err := cfg.Set(key, value); err != nil {
        log.Printf("更新 %s 失败: %v", key, err)
    }
}

配置更新特性:

  • 3秒写入延迟: 合并短时间内的多次更新
  • 智能验证: 字段级验证防止无效值
  • 原子性写入: 避免配置文件损坏
  • 自动备份: 变更前自动备份原配置
验证器管理
// 动态添加验证器
cfg.AddValidator(validation.NewEmailValidator())

// 函数式验证器
cfg.AddValidateFunc(func(config map[string]any) error {
    // 自定义验证逻辑
    if env := config["app"].(map[string]any)["env"]; env == "production" {
        // 生产环境特殊验证
        if ssl, exists := config["server"].(map[string]any)["ssl"]; !exists || ssl != true {
            return fmt.Errorf("生产环境必须启用SSL")
        }
    }
    return nil
})

// 获取当前验证器
validators := cfg.GetValidators()
fmt.Printf("当前验证器数量: %d\n", len(validators))

// 清除所有验证器
cfg.ClearValidators()

🧪 测试和调试

单元测试支持
func TestConfig(t *testing.T) {
    // 创建测试配置(纯内存模式)
    cfg, err := sysconf.New(
        sysconf.WithContent(`
app:
  name: "TestApp"
  debug: true
database:
  host: "localhost"
  port: 5432
`),
    )
    require.NoError(t, err)
    
    // 测试配置读取
    assert.Equal(t, "TestApp", cfg.GetString("app.name"))
    assert.True(t, cfg.GetBool("app.debug"))
    assert.Equal(t, 5432, cfg.GetInt("database.port"))
    
    // 测试并发安全
    var wg sync.WaitGroup
    for i := 0; i < 100; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            cfg.Set(fmt.Sprintf("test.key%d", id), fmt.Sprintf("value%d", id))
            _ = cfg.GetString("app.name")
        }(i)
    }
    wg.Wait()
    
    // 验证并发操作结果
    keys := cfg.Keys()
    assert.GreaterOrEqual(t, len(keys), 100)
}
性能基准测试
func BenchmarkConfig(b *testing.B) {
    cfg, _ := sysconf.New(sysconf.WithContent(testConfig))
    
    b.Run("SequentialReads", func(b *testing.B) {
        for i := 0; i < b.N; i++ {
            _ = cfg.GetString("app.name")
        }
    })
    
    b.Run("ConcurrentReads", func(b *testing.B) {
        b.RunParallel(func(pb *testing.PB) {
            for pb.Next() {
                _ = cfg.GetString("app.name")
            }
        })
    })
    
    b.Run("MixedOperations", func(b *testing.B) {
        b.RunParallel(func(pb *testing.PB) {
            i := 0
            for pb.Next() {
                if i%10 == 0 {
                    cfg.Set(fmt.Sprintf("bench.key%d", i), i)
                } else {
                    _ = cfg.GetString("app.name")  
                }
                i++
            }
        })
    })
}
调试技巧
// 启用调试日志
cfg, err := sysconf.New(
    sysconf.WithLogLevel("debug"),  // 开启详细日志
    // ... 其他选项
)

// 导出当前所有配置
allSettings := cfg.AllSettings()
fmt.Printf("当前配置: %+v\n", allSettings)

// 检查配置键是否存在
if !cfg.IsSet("some.key") {
    log.Println("配置键不存在:", "some.key")
}

// 获取所有配置键
keys := cfg.Keys()
log.Printf("配置键列表: %v", keys)

💡 最佳实践

1. 配置结构设计
// ✅ 推荐:按模块组织配置
type Config struct {
    App      AppConfig      `config:"app"`
    Database DatabaseConfig `config:"database"`
    Server   ServerConfig   `config:"server"`
    Cache    CacheConfig    `config:"cache"`
}

// ✅ 推荐:合理使用默认值和验证
type DatabaseConfig struct {
    Host     string `config:"host" default:"localhost" validate:"hostname"`
    Port     int    `config:"port" default:"5432" validate:"min=1,max=65535"`
    Password string `config:"password" validate:"required,min=8"`  // 敏感信息无默认值
}
2. 环境区分
// ✅ 推荐:按环境组织配置文件
// configs/
//   ├── base.yaml      # 基础配置
//   ├── dev.yaml       # 开发环境
//   ├── test.yaml      # 测试环境
//   └── prod.yaml      # 生产环境

env := os.Getenv("APP_ENV")
if env == "" {
    env = "dev"
}

cfg, err := sysconf.New(
    sysconf.WithName(env),
    sysconf.WithEnv(strings.ToUpper(env)),
    // ...
)
3. 错误处理
// ✅ 推荐:优雅的错误处理
if err := cfg.Unmarshal(&config); err != nil {
    log.Printf("配置解析失败: %v", err)
    // 使用默认配置继续运行
    config = getDefaultConfig()
}
4. 配置热重载
// ✅ 推荐:安全的热重载
type Application struct {
    config atomic.Value  // 线程安全的配置存储
}

func (app *Application) watchConfig(cfg *sysconf.Config) {
    cfg.Watch(func() {
        var newConfig AppConfig
        if err := cfg.Unmarshal(&newConfig); err != nil {
            log.Printf("热重载失败: %v", err)
            return
        }
        
        // 原子性更新配置
        app.config.Store(&newConfig)
        log.Println("配置热重载成功")
    })
}
5. 加密配置管理
// ✅ 推荐:分环境的加密配置
func createConfig(env string) (*sysconf.Config, error) {
    var encryptionPassword string
    
    switch env {
    case "production":
        // 生产环境:从密钥管理系统获取
        encryptionPassword = getFromKeyVault("CONFIG_ENCRYPTION_KEY")
    case "staging":
        // 测试环境:从环境变量获取
        encryptionPassword = os.Getenv("STAGING_CONFIG_PASSWORD")
    case "development":
        // 开发环境:使用默认密码或不加密
        encryptionPassword = ""  // 开发环境不加密
    }
    
    options := []sysconf.Option{
        sysconf.WithPath("configs"),
        sysconf.WithName(fmt.Sprintf("app-%s", env)),
        sysconf.WithContent(getDefaultConfig(env)),
    }
    
    // 只在有密码时启用加密
    if encryptionPassword != "" {
        options = append(options, sysconf.WithEncryption(encryptionPassword))
    }
    
    return sysconf.New(options...)
}

🛠️ 使用指南

配置文件加载
// 使用WithContent提供默认配置
cfg, err := sysconf.New(
    sysconf.WithPath("configs"),
    sysconf.WithName("app"),
    sysconf.WithContent(defaultConfig),  // 提供默认配置
)
字段级验证
// 字段级验证特性
err := cfg.Set("server.port", 8080)
// 仅验证 server.port 相关规则
环境变量配置
// 使用智能大小写匹配
cfg, err := sysconf.New(
    sysconf.WithEnv("APP"),  // 支持各种大小写格式
)

// 支持的环境变量格式
// app_database_host=localhost    ✅ 小写
// APP_DATABASE_HOST=localhost    ✅ 大写  
// App_Database_Host=localhost    ✅ 混合大小写
性能优化建议
// 使用环境变量前缀优化性能
cfg, err := sysconf.New(
    sysconf.WithEnv("MYAPP"),  // 前缀过滤,提升性能
)

// 性能优化特性:
// - 环境变量数 > 300 时自动启用优化策略
// - 处理时间 > 100ms 时提供性能建议
// - 智能批处理和时间保护机制

🔮 路线图

已完成 ✅
  • 线程安全: 基于atomic.Value的并发安全架构
  • 性能优化: 微秒级读取,毫秒级写入
  • 智能验证系统: 字段级验证,支持灵活配置
  • 动态验证器匹配: 自动推断支持字段
  • 企业级加密: ChaCha20-Poly1305认证加密
  • 智能环境变量: 支持多种大小写格式
  • 完整生态集成: viper/cobra/pflag无缝兼容

🤝 贡献指南

我们欢迎各种形式的贡献!

开发环境
# 克隆代码
git clone https://github.com/darkit/sysconf.git
cd sysconf

# 安装依赖
go mod download

# 运行测试
go test ./...

# 运行性能基准测试
go test -bench=. ./...

# 运行示例
cd examples
go run .
提交规范
  • 🐛 bug: 修复bug
  • feat: 新功能
  • 📚 docs: 文档更新
  • 🎨 style: 代码格式
  • ♻️ refactor: 重构
  • perf: 性能优化
  • test: 测试相关

📊 项目状态

  • 线程安全: 统一Config架构,通过并发测试
  • 高性能: 优化的读写性能,支持高并发场景
  • 智能验证: 字段级验证系统
  • 动态匹配: 验证器自动推断
  • 企业级特性: 加密、验证、热重载完整支持
  • 稳定性: 生产就绪,已通过大规模测试
  • 兼容性: Go 1.23+ 支持,向后兼容现有代码
  • 文档: 完整的API文档和最佳实践指南
  • 测试: 完善的测试覆盖,包含并发和性能基准测试

📄 许可证

MIT License - 查看 LICENSE 文件了解详情。


如果这个项目对您有帮助,请给我们一个 ⭐️

GitHubAPI文档验证器文档加密示例反馈

Documentation

Index

Constants

View Source
const (
	ErrTypeFileNotFound   = "FileNotFound"
	ErrTypePermission     = "Permission"
	ErrTypeInvalidFormat  = "InvalidFormat"
	ErrTypeValidation     = "Validation"
	ErrTypeDecryption     = "Decryption"
	ErrTypeConversion     = "Conversion"
	ErrTypeEnvironment    = "Environment"
	ErrTypeInitialization = "Initialization"
)

错误类型常量

Variables

View Source
var (
	ErrInvalidKey       = errors.New("invalid configuration key")
	ErrInitGlobalConfig = errors.New("failed to initialize global config")
	ErrAlreadyClosed    = errors.New("config already closed")
)

Functions

func GetAs added in v0.2.0

func GetAs[T any](c *Config, key string, defaultValue ...T) T

GetAs 泛型获取配置值,提供类型安全的访问方式 支持类型: string, int, int32, int64, float32, float64, bool, time.Duration, time.Time

使用示例:

host := cfg.GetAs[string]("database.host", "localhost")
port := cfg.GetAs[int]("database.port", 5432)
timeout := cfg.GetAs[time.Duration]("timeout", 30*time.Second)

func GetAsWithError added in v1.0.6

func GetAsWithError[T any](cfg *Config, key string) (T, error)

GetAsWithError 返回转换后的值和错误,便于区分键不存在或转换失败的具体原因

func GetConfigErrorType added in v0.2.0

func GetConfigErrorType(err error) string

GetConfigErrorType 获取配置错误类型

func GetErrorSuggestion added in v0.2.0

func GetErrorSuggestion(err error) string

GetErrorSuggestion 根据错误类型提供修复建议

func GetSliceAs added in v0.2.0

func GetSliceAs[T any](c *Config, key string) []T

GetSliceAs 泛型获取切片配置值 支持类型: []string, []int, []float64, []bool

使用示例:

features := cfg.GetSliceAs[string]("server.features")
ports := cfg.GetSliceAs[int]("server.ports")

func GetWithFallback added in v0.2.0

func GetWithFallback[T any](c *Config, keys ...string) T

GetWithFallback 获取配置值,支持多个fallback键 按顺序尝试每个键,直到找到有效值

使用示例:

port := cfg.GetWithFallback[int]("server.port", "app.port", "port")

func IsConfigError added in v0.2.0

func IsConfigError(err error) bool

IsConfigError 检查是否为配置错误

func MustGetAs added in v0.2.0

func MustGetAs[T any](c *Config, key string) T

MustGetAs 泛型获取配置值,如果不存在或转换失败则panic 适用于必须存在的配置项

func PrintErrorHelp added in v0.2.0

func PrintErrorHelp(err error)

PrintErrorHelp 打印错误帮助信息

func Register

func Register(module, key string, value any) error

Register 注册配置项到全局配置

func ResetGlobalMetrics added in v0.2.0

func ResetGlobalMetrics()

ResetGlobalMetrics 重置全局性能指标

func WorkPath

func WorkPath(parts ...string) string

WorkPath 获取工作目录 - 空参数或 "." 返回当前工作目录 - 绝对路径直接返回 - 以 "~" 开头的路径展开为用户主目录 - 相对路径基于当前工作目录展开

Types

type Config

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

Config 统一配置实现

func Default

func Default(opts ...Option) *Config

Default 获取全局单例配置实例

func New

func New(opts ...Option) (*Config, error)

New 创建新的统一配置实例

func (*Config) AddValidateFunc added in v0.2.0

func (c *Config) AddValidateFunc(fn func(config map[string]any) error)

AddValidateFunc 添加配置验证函数(便利方法)

func (*Config) AddValidator added in v0.2.0

func (c *Config) AddValidator(validator ConfigValidator)

AddValidator 添加配置验证器

func (*Config) AllSettings added in v0.2.0

func (c *Config) AllSettings() map[string]any

AllSettings 获取所有配置(返回副本以保证线程安全)

func (*Config) ClearValidators added in v0.2.0

func (c *Config) ClearValidators()

ClearValidators 清除所有验证器

func (*Config) Close added in v1.0.6

func (c *Config) Close() error

Close 停止所有后台资源,确保幂等与超时保护

func (*Config) Get

func (c *Config) Get(key string, def ...any) any

Get 获取配置值

参数:

  • key: 配置键名
  • def: 可选的默认值,当配置不存在时返回

返回值:

  • 配置值,如果键不存在且提供了默认值则返回默认值

func (*Config) GetBool

func (c *Config) GetBool(parts ...string) bool

GetBool 获取布尔值配置

支持两种调用方式:

  • GetBool("database.host", "true") - 点号分隔的键名
  • GetBool("database", "host", "true") - 多参数形式

参数:

  • parts: 可变参数,最后一个参数可选作为默认值

返回值:

  • 布尔类型的配置值,如果键不存在且提供了默认值则返回默认值

func (*Config) GetBoolSlice added in v0.2.0

func (c *Config) GetBoolSlice(key string) []bool

GetBoolSlice 获取布尔值切片配置

参数:

  • key: 配置键名

返回值:

  • 布尔值切片类型的配置值

func (*Config) GetCryptoType added in v0.2.0

func (c *Config) GetCryptoType() string

GetCryptoType 获取当前使用的加密类型

func (*Config) GetDuration added in v0.1.1

func (c *Config) GetDuration(key string) time.Duration

GetDuration 获取时间间隔配置

参数:

  • key: 配置键名

返回值:

  • 时间间隔类型的配置值

func (*Config) GetEncryptionKey added in v0.2.0

func (c *Config) GetEncryptionKey() string

GetEncryptionKey 获取当前使用的加密密钥(如果适用)

func (*Config) GetFloat

func (c *Config) GetFloat(parts ...string) float64

GetFloat 获取浮点数配置

支持两种调用方式:

  • GetFloat("metrics.value", "0.95") - 点号分隔的键名
  • GetFloat("metrics", "value", "0.95") - 多参数形式

参数:

  • parts: 可变参数,最后一个参数可选作为默认值

返回值:

  • 浮点类型的配置值,如果键不存在且提供了默认值则返回默认值

func (*Config) GetFloatSlice added in v0.2.0

func (c *Config) GetFloatSlice(key string) []float64

GetFloatSlice 获取浮点数切片配置

参数:

  • key: 配置键名

返回值:

  • 浮点数切片类型的配置值

func (*Config) GetInt

func (c *Config) GetInt(parts ...string) int

GetInt 获取整数配置

支持两种调用方式:

  • GetInt("database.port", "5432") - 点号分隔的键名
  • GetInt("database", "port", "5432") - 多参数形式

参数:

  • parts: 可变参数,最后一个参数可选作为默认值

返回值:

  • 整数类型的配置值,如果键不存在且提供了默认值则返回默认值

func (*Config) GetIntSlice added in v0.1.1

func (c *Config) GetIntSlice(key string) []int

GetIntSlice 获取整数切片配置

参数:

  • key: 配置键名

返回值:

  • 整数切片类型的配置值

func (*Config) GetMetrics added in v0.2.0

func (c *Config) GetMetrics() MetricsSnapshot

GetMetrics 获取配置的性能指标(使用全局监控器)

func (*Config) GetString

func (c *Config) GetString(parts ...string) string

GetString 获取字符串配置

支持两种调用方式:

  • GetString("database.host", "localhost") - 点号分隔的键名
  • GetString("database", "host", "localhost") - 多参数形式

参数:

  • parts: 可变参数,最后一个参数可选作为默认值

返回值:

  • 字符串类型的配置值,如果键不存在且提供了默认值则返回默认值

func (*Config) GetStringMap

func (c *Config) GetStringMap(key string) map[string]any

GetStringMap 获取字符串映射配置

参数:

  • key: 配置键名

返回值:

  • 字符串映射类型的配置值,映射值为任意类型

func (*Config) GetStringMapString added in v0.1.1

func (c *Config) GetStringMapString(key string) map[string]string

GetStringMapString 获取字符串-字符串映射配置

参数:

  • key: 配置键名

返回值:

  • 字符串到字符串的映射类型配置值

func (*Config) GetStringSlice

func (c *Config) GetStringSlice(key string) []string

GetStringSlice 获取字符串切片配置

参数:

  • key: 配置键名

返回值:

  • 字符串切片类型的配置值

func (*Config) GetTime added in v0.1.1

func (c *Config) GetTime(key string) time.Time

GetTime 获取时间配置

参数:

  • key: 配置键名

返回值:

  • 时间类型的配置值

func (*Config) GetValidators added in v0.2.0

func (c *Config) GetValidators() []ConfigValidator

GetValidators 获取当前所有验证器(只读)

func (*Config) GetWithError added in v0.2.0

func (c *Config) GetWithError(key string) (any, error)

GetWithError 获取配置值并返回错误信息

参数:

  • key: 配置键名

返回值:

  • 配置值和可能的错误

func (*Config) IsEncryptionEnabled added in v0.2.0

func (c *Config) IsEncryptionEnabled() bool

IsEncryptionEnabled 检查是否启用了加密

func (*Config) IsSet added in v0.2.0

func (c *Config) IsSet(key string) bool

IsSet 检查配置键是否存在

func (*Config) Keys added in v0.2.0

func (c *Config) Keys() []string

Keys 获取所有配置键

func (*Config) Marshal added in v0.1.7

func (c *Config) Marshal(value any, prefix ...string) error

Marshal 将结构体或其他数据类型序列化并保存到配置中

参数:

  • value: 要序列化的值(通常是结构体)
  • prefix: 可选的配置键前缀,用于指定保存路径

返回值:

  • error: 序列化过程中遇到的错误,成功则为nil

func (*Config) ResetMetrics added in v0.2.0

func (c *Config) ResetMetrics()

ResetMetrics 重置性能指标(使用全局监控器)

func (*Config) Set

func (c *Config) Set(key string, value any) error

Set 设置配置值

func (*Config) SetEnvPrefix added in v0.1.1

func (c *Config) SetEnvPrefix(prefix string) error

validateAllConfigsWithData 使用传入数据执行全量验证,避免重复持锁。 SetEnvPrefix 更新环境变量选项

func (*Config) Unmarshal

func (c *Config) Unmarshal(obj any, key ...string) error

Unmarshal 将配置解析到结构体 key 为空时解析整个配置,否则解析指定的配置段 支持 default 标签设置默认值 支持 required 标签验证必填字段 支持大驼峰命名风格的结构体字段自动映射到下划线风格的配置键名

func (*Config) Viper added in v0.1.1

func (c *Config) Viper() *viper.Viper

Viper 返回底层的 viper 实例

func (*Config) Watch

func (c *Config) Watch(callbacks ...func())

Watch 监听配置变化

func (*Config) WatchWithContext added in v0.2.0

func (c *Config) WatchWithContext(ctx context.Context, callbacks ...func()) context.CancelFunc

WatchWithContext 监听配置变化并返回取消函数,用于显式停止监听。

type ConfigCrypto added in v0.2.0

type ConfigCrypto interface {
	// Encrypt 加密配置数据
	// data: 要加密的配置数据(通常是YAML/JSON等格式的字节数组)
	// 返回: 加密后的数据和错误
	Encrypt(data []byte) ([]byte, error)

	// Decrypt 解密配置数据
	// data: 要解密的数据
	// 返回: 解密后的原始配置数据和错误
	Decrypt(data []byte) ([]byte, error)

	// IsEncrypted 检查数据是否已加密
	// data: 要检查的数据
	// 返回: 如果数据已加密返回true,否则返回false
	IsEncrypted(data []byte) bool
}

ConfigCrypto 配置加密接口 用户可以实现此接口来提供自定义的加密算法

func NewCrypto added in v0.2.0

func NewCrypto(key string) (ConfigCrypto, error)

NewCrypto 创建默认加密器的便利函数(向后兼容)

type ConfigError added in v0.2.0

type ConfigError struct {
	Type    string `json:"type"`
	Message string `json:"message"`
	Key     string `json:"key,omitempty"`
	Value   string `json:"value,omitempty"`
	File    string `json:"file,omitempty"`
	Cause   error  `json:"-"`
}

ConfigError 配置错误类型

func NewConfigError added in v0.2.0

func NewConfigError(errorType, message string) *ConfigError

NewConfigError 创建新的配置错误

func NewConfigErrorWithCause added in v0.2.0

func NewConfigErrorWithCause(errorType, message string, cause error) *ConfigError

NewConfigErrorWithCause 创建带原因的配置错误

func NewConfigErrorWithDetails added in v0.2.0

func NewConfigErrorWithDetails(errorType, message, key, value, file string, cause error) *ConfigError

NewConfigErrorWithDetails 创建带详细信息的配置错误

func (*ConfigError) Error added in v0.2.0

func (e *ConfigError) Error() string

func (*ConfigError) Unwrap added in v0.2.0

func (e *ConfigError) Unwrap() error

type ConfigValidateFunc added in v0.2.0

type ConfigValidateFunc func(config map[string]any) error

配置验证函数类型(用于简化接口实现)

func (ConfigValidateFunc) GetName added in v0.2.0

func (f ConfigValidateFunc) GetName() string

GetName 实现ConfigValidator接口

func (ConfigValidateFunc) Validate added in v0.2.0

func (f ConfigValidateFunc) Validate(config map[string]any) error

Validate 实现ConfigValidator接口

type ConfigValidator added in v0.2.0

type ConfigValidator interface {
	// Validate 验证配置
	// config: 当前所有配置的map形式
	// 返回: 验证错误,如果验证通过则返回nil
	Validate(config map[string]any) error
	// GetName 获取验证器名称
	GetName() string
}

配置验证器接口

type CryptoOptions added in v0.2.0

type CryptoOptions struct {
	Enabled bool         // 是否启用加密
	Crypto  ConfigCrypto // 加密实现,如果为nil则使用默认ChaCha20加密
	Key     string       // 加密密钥,如果为空则生成随机密钥
}

CryptoOptions 加密配置选项

type DefaultCrypto added in v0.2.0

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

DefaultCrypto 默认加密实现 - 使用 ChaCha20-Poly1305

ChaCha20-Poly1305 的优势: - 高性能:在各种硬件平台上都有优秀的性能表现 - 现代密码学:被广泛认可的现代AEAD算法 - 安全性:提供认证加密,同时保证机密性和完整性 - 抗侧信道攻击:相比AES在软件实现中更安全 - 移动友好:在ARM处理器上性能特别出色

func NewChaCha20Crypto added in v0.2.0

func NewChaCha20Crypto(key string) (*DefaultCrypto, error)

NewChaCha20Crypto 别名函数,指向默认加密器

func NewChaCha20CryptoFromKey added in v0.2.0

func NewChaCha20CryptoFromKey(encodedKey string) (*DefaultCrypto, error)

NewChaCha20CryptoFromKey 别名函数,指向默认加密器

func NewDefaultCrypto added in v0.2.0

func NewDefaultCrypto(key string) (*DefaultCrypto, error)

NewDefaultCrypto 创建新的默认加密器 key: 加密密钥,如果为空则生成随机密钥

func NewDefaultCryptoFromKey added in v0.2.0

func NewDefaultCryptoFromKey(encodedKey string) (*DefaultCrypto, error)

NewDefaultCryptoFromKey 从base64编码的密钥创建默认加密器

func (*DefaultCrypto) Decrypt added in v0.2.0

func (d *DefaultCrypto) Decrypt(data []byte) ([]byte, error)

Decrypt 实现ConfigCrypto接口的解密方法

func (*DefaultCrypto) Encrypt added in v0.2.0

func (d *DefaultCrypto) Encrypt(data []byte) ([]byte, error)

Encrypt 实现ConfigCrypto接口的加密方法

func (*DefaultCrypto) GetKey added in v0.2.0

func (d *DefaultCrypto) GetKey() string

GetKey 获取加密密钥的base64编码(用于保存和恢复)

func (*DefaultCrypto) GetKeyBytes added in v0.2.0

func (d *DefaultCrypto) GetKeyBytes() []byte

GetKeyBytes 获取原始密钥字节(用于高级用途)

func (*DefaultCrypto) IsEncrypted added in v0.2.0

func (d *DefaultCrypto) IsEncrypted(data []byte) bool

IsEncrypted 检查数据是否已加密

type EnvOptions

type EnvOptions struct {
	Prefix    string // 环境变量前缀
	Enabled   bool   // 是否启用环境变量
	SmartCase bool   // 支持多种大小写格式的环境变量
}

EnvOptions 环境变量配置选项

type ErrorRecovery added in v0.2.0

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

ErrorRecovery 错误恢复策略

func NewErrorRecovery added in v0.2.0

func NewErrorRecovery(config *Config) *ErrorRecovery

NewErrorRecovery 创建错误恢复实例

func (*ErrorRecovery) RecoverFromError added in v0.2.0

func (er *ErrorRecovery) RecoverFromError(err error) error

RecoverFromError 从错误中恢复

type Logger added in v0.1.8

type Logger interface {
	// Debug 记录调试级别的日志
	Debug(args ...interface{})
	// Debugf 格式化记录调试级别的日志
	Debugf(format string, args ...interface{})
	// Info 记录信息级别的日志
	Info(args ...interface{})
	// Infof 格式化记录信息级别的日志
	Infof(format string, args ...interface{})
	// Warn 记录警告级别的日志
	Warn(args ...interface{})
	// Warnf 格式化记录警告级别的日志
	Warnf(format string, args ...interface{})
	// Error 记录错误级别的日志
	Error(args ...interface{})
	// Errorf 格式化记录错误级别的日志
	Errorf(format string, args ...interface{})
	// Fatal 记录致命错误级别的日志
	Fatal(args ...interface{})
	// Fatalf 格式化记录致命错误级别的日志
	Fatalf(format string, args ...interface{})
}

Logger 日志接口定义,用于配置系统中的日志记录

type Metrics added in v0.2.0

type Metrics struct {
	StartTime      time.Time                `json:"start_time"`
	GetCount       int64                    `json:"get_count"`
	SetCount       int64                    `json:"set_count"`
	CacheHits      int64                    `json:"cache_hits"`
	CacheMisses    int64                    `json:"cache_misses"`
	LastGetTime    time.Time                `json:"last_get_time"`
	LastSetTime    time.Time                `json:"last_set_time"`
	ErrorCount     int64                    `json:"error_count"`
	OperationTimes map[string]time.Duration `json:"operation_times"`
	// contains filtered or unexported fields
}

Metrics 配置性能指标

func NewMetrics added in v0.2.0

func NewMetrics() *Metrics

NewMetrics 创建新的性能指标实例

func (*Metrics) GetStats added in v0.2.0

func (m *Metrics) GetStats() MetricsSnapshot

GetStats 获取统计信息

func (*Metrics) RecordError added in v0.2.0

func (m *Metrics) RecordError()

RecordError 记录错误

func (*Metrics) RecordGet added in v0.2.0

func (m *Metrics) RecordGet(duration time.Duration, cacheHit bool)

RecordGet 记录Get操作

func (*Metrics) RecordOperation added in v0.2.0

func (m *Metrics) RecordOperation(name string, duration time.Duration)

RecordOperation 记录自定义操作时间

func (*Metrics) RecordSet added in v0.2.0

func (m *Metrics) RecordSet(duration time.Duration)

RecordSet 记录Set操作

func (*Metrics) Reset added in v0.2.0

func (m *Metrics) Reset()

Reset 重置统计信息

type MetricsSnapshot added in v0.2.0

type MetricsSnapshot struct {
	StartTime      time.Time                `json:"start_time"`
	Uptime         time.Duration            `json:"uptime"`
	GetCount       int64                    `json:"get_count"`
	SetCount       int64                    `json:"set_count"`
	CacheHits      int64                    `json:"cache_hits"`
	CacheMisses    int64                    `json:"cache_misses"`
	CacheHitRatio  float64                  `json:"cache_hit_ratio"`
	ErrorCount     int64                    `json:"error_count"`
	AvgGetTime     time.Duration            `json:"avg_get_time"`
	AvgSetTime     time.Duration            `json:"avg_set_time"`
	LastGetTime    time.Time                `json:"last_get_time"`
	LastSetTime    time.Time                `json:"last_set_time"`
	OperationTimes map[string]time.Duration `json:"operation_times"`
}

MetricsSnapshot 性能指标快照

func GetGlobalMetrics added in v0.2.0

func GetGlobalMetrics() MetricsSnapshot

GetGlobalMetrics 获取全局性能指标

func (MetricsSnapshot) GetSummary added in v0.2.0

func (s MetricsSnapshot) GetSummary() string

GetSummary 获取性能摘要字符串

type NopLogger added in v0.1.8

type NopLogger struct{}

NopLogger 空日志实现,不执行任何操作

func (*NopLogger) Debug added in v0.1.8

func (l *NopLogger) Debug(args ...interface{})

Debug 实现Logger接口

func (*NopLogger) Debugf added in v0.1.8

func (l *NopLogger) Debugf(format string, args ...interface{})

Debugf 实现Logger接口

func (*NopLogger) Error added in v0.1.8

func (l *NopLogger) Error(args ...interface{})

Error 实现Logger接口

func (*NopLogger) Errorf added in v0.1.8

func (l *NopLogger) Errorf(format string, args ...interface{})

Errorf 实现Logger接口

func (*NopLogger) Fatal added in v0.1.8

func (l *NopLogger) Fatal(args ...interface{})

Fatal 实现Logger接口

func (*NopLogger) Fatalf added in v0.1.8

func (l *NopLogger) Fatalf(format string, args ...interface{})

Fatalf 实现Logger接口

func (*NopLogger) Info added in v0.1.8

func (l *NopLogger) Info(args ...interface{})

Info 实现Logger接口

func (*NopLogger) Infof added in v0.1.8

func (l *NopLogger) Infof(format string, args ...interface{})

Infof 实现Logger接口

func (*NopLogger) Warn added in v0.1.8

func (l *NopLogger) Warn(args ...interface{})

Warn 实现Logger接口

func (*NopLogger) Warnf added in v0.1.8

func (l *NopLogger) Warnf(format string, args ...interface{})

Warnf 实现Logger接口

type Option

type Option func(*Config)

Option 配置选项

func WithBindPFlags added in v0.1.7

func WithBindPFlags(flags ...*pflag.FlagSet) Option

WithBindPFlags 设置命令行标志绑定

func WithCacheTiming added in v0.2.0

func WithCacheTiming(warmup, rebuild time.Duration) Option

WithCacheTiming 设置读取缓存的预热与重建延迟。 传入 0 或负值可用于禁用对应延迟并在同一 goroutine 中立即刷新。

func WithContent

func WithContent(content string) Option

WithContent 设置默认配置文件内容

func WithCrypto added in v0.2.0

func WithCrypto(opts CryptoOptions) Option

WithCrypto 设置配置加密选项

func WithEncryption added in v0.2.0

func WithEncryption(key string) Option

WithEncryption 便利函数:启用配置加密并设置密钥 key: 加密密钥,如果为空则生成随机密钥

func WithEncryptionCrypto added in v0.2.0

func WithEncryptionCrypto(crypto ConfigCrypto) Option

WithEncryptionCrypto 便利函数:启用配置加密并使用自定义加密器 crypto: 自定义加密实现

func WithEnv added in v0.2.0

func WithEnv(prefix string) Option

WithEnv 便利函数:启用环境变量并设置前缀,默认开启智能大小写匹配

func WithEnvOptions

func WithEnvOptions(opts EnvOptions) Option

WithEnvOptions 设置环境变量选项

func WithEnvSmartCase added in v0.2.0

func WithEnvSmartCase(prefix string, smartCase bool) Option

WithEnvSmartCase 便利函数:设置环境变量选项并明确指定智能大小写匹配

func WithLogger added in v0.1.8

func WithLogger(logger Logger) Option

WithLogger 设置配置的日志记录器

func WithMode

func WithMode(mode string) Option

WithMode 设置配置文件模式

func WithName

func WithName(name string) Option

WithName 设置配置文件名称

func WithPath

func WithPath(path string) Option

WithPath 设置配置文件路径

func WithValidateFunc added in v0.2.0

func WithValidateFunc(fn func(config map[string]any) error) Option

WithValidateFunc 添加配置验证函数(便利方法)

func WithValidator added in v0.2.0

func WithValidator(validator ConfigValidator) Option

WithValidator 添加配置验证器

func WithValidators added in v0.2.0

func WithValidators(validators ...ConfigValidator) Option

WithValidators 批量添加多个验证器

func WithWriteFlushDelay added in v0.2.0

func WithWriteFlushDelay(delay time.Duration) Option

WithWriteFlushDelay 设置配置写入的延迟时间,为0或负值时表示立即写入。

type ParamParser added in v0.2.0

type ParamParser struct{}

ParamParser 参数解析器

func (*ParamParser) ParseKeyAndDefault added in v0.2.0

func (p *ParamParser) ParseKeyAndDefault(parts []string) (string, string, bool)

ParseKeyAndDefault 解析配置键和默认值 返回: (key, defaultValue, hasDefault)

type PerformanceMonitor added in v0.2.0

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

PerformanceMonitor 性能监控器

func NewPerformanceMonitor added in v0.2.0

func NewPerformanceMonitor(config *Config, interval time.Duration) *PerformanceMonitor

NewPerformanceMonitor 创建性能监控器

func (*PerformanceMonitor) Start added in v0.2.0

func (pm *PerformanceMonitor) Start()

Start 启动性能监控

func (*PerformanceMonitor) Stop added in v0.2.0

func (pm *PerformanceMonitor) Stop()

Stop 停止性能监控

Directories

Path Synopsis
examples
cmd/demo_basic command
cmd/smart_case command
internal

Jump to

Keyboard shortcuts

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