golang简单配置库支持递归占位符解析插件go-up的使用
Golang简单配置库支持递归占位符解析插件go-up的使用
go-up是一个简单的配置库,支持占位符解析且没有复杂魔法。
主要特性
- 递归占位符解析
- 小于10KB
- 无外部依赖
- 模块化和可扩展架构
快速开始
- 导入go-up库:
import (
"github.com/ufoscout/go-up"
)
- 定义一些属性(可以使用占位符),例如在
config.properties
中:
# 这是注释行
server.port=9090
server.host=127.0.0.1
# 这里使用占位符,它们将在运行时解析
server.url=http://${server.host}:${server.port}/
- 构建一个包含你属性的go-up对象:
ignoreFileNotFound := false
up, err := NewGoUp().
AddFile("./confing.properties", ignoreFileNotFound).
Build();
- 通过key查找属性:
port := up.GetIntOrDefault("server.port", 8080); // 返回9090
serverUrl := up.GetString("server.url") // 返回 http://127.0.0.1:9090/
defaultVal := up.GetStringOrDefault("unknown_Key", "defaultValue") // 返回defaultValue
占位符解析示例
go-up支持递归解析占位符。例如:
fileOne.properties:
server.url=http://${${environment}.server.host}:${server.port}
server.port=8080
fileTwo.properties:
environment=PROD
PROD.server.host=10.10.10.10
DEV.server.host=127.0.0.1
Go代码:
up, err := go_up.NewGoUp().
AddFile("./fileOne.properties", false).
AddFile("./fileTwo.properties", false).
Build()
fmt.Println(up.GetString("server.url")) // 打印 'http://10.10.10.10:8080'
默认值
占位符可以有默认值,当key未提供时使用。例如:
config.properties:
# 如果'PORT_NUMBER'未提供,则使用默认值"8080"
server.port=${PORT_NUMBER:8080}
# 默认是127.0.0.1
server.ip=${IP:127.0.0.1}
server.url=${server.ip}/${server.port}
Go代码:
up, err := go_up.NewGoUp().
AddFile("./config.properties", false).
Build()
// 打印 'http://127.0.0.1:8080'
fmt.Println(up.GetString("server.url"))
完整示例
package main
import (
"fmt"
"os"
go_up "github.com/ufoscout/go-up"
)
func main() {
// 示例环境变量
os.Setenv("APP_PREFIX_DB_HOST", "db.example.com")
up, err := go_up.NewGoUp().
// 加载默认配置文件
AddFile("./default.properties", false).
// 加载环境变量(带前缀)
AddReader(go_up.NewEnvReader("APP_PREFIX_", true, true)).
// 设置自定义分隔符
Delimiters("%(", ")").
// 构建配置对象
Build()
if err != nil {
panic(err)
}
// 获取配置值
dbHost := up.GetString("db.host")
dbPort := up.GetIntOrDefault("db.port", 3306)
fmt.Printf("Database connection: %s:%d\n", dbHost, dbPort)
// 使用递归占位符
appName := up.GetString("app.name")
appVersion := up.GetString("app.version")
appFullName := up.GetString("app.fullname") // 可能包含占位符 ${app.name}-${app.version}
fmt.Printf("Application: %s (%s)\n", appFullName, appName)
}
API概览
go-up提供了简单直接的API:
type GoUp interface {
Exists(key string) bool
GetBool(key string) bool
GetBoolOrDefault(key string, defaultValue bool) bool
GetBoolOrFail(key string) (bool, error)
GetFloat64(key string) float64
GetFloat64OrDefault(key string, defaultValue float64) float64
GetFloat64OrFail(key string) (float64, error)
GetInt(key string) int
GetIntOrDefault(key string, defaultValue int) int
GetIntOrFail(key string) (int, error)
GetString(key string) string
GetStringOrDefault(key string, defaultValue string) string
GetStringOrFail(key string) (string, error)
GetStringSlice(key string, separator string) []string
GetStringSliceOrDefault(key string, separator string, defaultValue []string) []string
GetStringSliceOrFail(key string, separator string) ([]string, error)
}
go-up是一个轻量级的配置解决方案,特别适合需要递归占位符解析和小体积应用的场景。
更多关于golang简单配置库支持递归占位符解析插件go-up的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复