参考:
https://github.com/go-ini/ini
https://ini.unknwon.io/docs/advanced/map_and_reflect
主要有 toml 和 ini 两个解析库
ini 包
简单使用
ini 文件
[log]
dir = ./log
Backup = 2
go 文件 (直接结构体映射)
package main
import (
"fmt"
"gopkg.in/ini.v1"
"os"
)
// 直接 结构体对应 [ ] 就可以了, 结构体要是大写的, 同样ini 文件,所有字段也是要大写开头,不然需要结构体 定义 tag `ini:"dir"` 对应 字段 Dir
type Ini_test struct{
Log Log `ini:"log"` // Log `ini:"log"` 这样写也可以, 因为只有一个匿名类型, go 也是可以直接用类型名字 访问的
}
type Log struct{
Dir string `ini:"dir"`
Backup int
}
func init_conf(){
cfg, err := ini.Load("./convert_server.ini")
if err != nil {
fmt.Printf("Fail to read file: %v", err)
os.Exit(1)
}
var ini_test Ini_test
_ = cfg.MapTo(&ini_test)
fmt.Println(ini_test.Log)
}
go 文件 (直接函数获取每个值)
Log_dir = cfg.Section("log").Key("dir").String() // 日志路径
Log_level = cfg.Section("log").Key("level").In("info",
[]string{"error", "warning", "info", "debug"})
// 可以在 key 后面加 in 一个切片, 用来校验值是不是在其中,并且可以提供一个默认值
toml 包
- 代码
package main
import (
"fmt"
"github.com/BurntSushi/toml"
)
/*
toml 格式和ini 有点区别
相比之下,还是 toml读取配置比较整齐一点
字符串加双引号, 数组加 [], 原来的ini 解析的,都不需要加 双引号
*/
func main(){
if _, err := toml.DecodeFile( "./nacos.cfg", NacosConfig); err != nil {
fmt.Println("InitNacos|ini.Load|配置文件加载失败:" + err.Error())
}
fmt.Println(NacosConfig.File.GrpcClientJson) // 获取映射字段
}
var NacosConfig = &NacosCfg{}
/* nacos.cfg 文件结构 */
type NacosCfg struct {
ServerConfig ServerConfig
ClientConfig ClientConfig
File File
Log Log
Option Option
}
/* nacos 服务端配置 */
type ServerConfig struct{
Endpoints [] string
}
/* nacos客户端配置 */
type ClientConfig struct{
Namespace string // 命名空间ID
Group string // 组名:matrix
Username string
Passwd string
Timeout uint64 // 请求超时
NotLoadCacheAtStart bool // 开机不加载本地缓存配置
CacheDir string // 缓存目录
}
type File struct{
NetworkCfg string // network.cfg
GrpcClientJson string // grpc_client.json
HttpClientJson string // http_client.json
RedisJson string // redis.json
SeelogXml string // seelog.xml
}
/* nacos客户端日志配置 */
type Log struct{
LogDir string // 日志目录
LogLevel string // 日志等级
}
/* 其他配置 */
type Option struct{
UseNacos bool // 是否启用nacos
}
- cfg 文件
# nacos服务端
[ServerConfig]
# 地址用多个 , 号隔开
Endpoints = ["172.31.87.134:8848"]
# nacos客户端
[ClientConfig]
Namespace = "3f7d98a2-ba3a-4f5b-b61b-4a3a48fbc380"
Group = "matrix"
Username = "tianyi-testpre"
Passwd = "Tiany1234%"
Timeout = 5000
# 开机加载本地缓存配置
NotLoadCacheAtStart = false
# 配置缓存地址
CacheDir = "/tmp/log/dFir/matrix/"
# 原配置文件
[File]
NetworkCfg = "network.cfg"
GrpcClientJson = "grpc_client.json"
HttpClientJson = "http_client.json"
RedisJson = "redis.json"
SeelogXml = "seelog.xml"
# Nacos客户端日志
[Log]
LogDir = "/tmp/log/dFir/matrix/"
LogLevel = "error"
# 其他配置项
[Option]
UseNacos = true