參考:
https://github.com/go-ini/ini
https://ini.unknwon.io/docs/advanced/map_and_reflect
主要有 toml 和 ini 兩個(gè)解析庫
ini 包
簡單使用
ini 文件
[log]
dir = ./log
Backup = 2
go 文件 (直接結(jié)構(gòu)體映射)
package main
import (
"fmt"
"gopkg.in/ini.v1"
"os"
)
// 直接 結(jié)構(gòu)體對應(yīng) [ ] 就可以了荣瑟, 結(jié)構(gòu)體要是大寫的痰洒, 同樣ini 文件摸屠,所有字段也是要大寫開頭,不然需要結(jié)構(gòu)體 定義 tag `ini:"dir"` 對應(yīng) 字段 Dir
type Ini_test struct{
Log Log `ini:"log"` // Log `ini:"log"` 這樣寫也可以宁仔, 因?yàn)橹挥幸粋€(gè)匿名類型, 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 文件 (直接函數(shù)獲取每個(gè)值)
Log_dir = cfg.Section("log").Key("dir").String() // 日志路徑
Log_level = cfg.Section("log").Key("level").In("info",
[]string{"error", "warning", "info", "debug"})
// 可以在 key 后面加 in 一個(gè)切片, 用來校驗(yàn)值是不是在其中,并且可以提供一個(gè)默認(rèn)值
toml 包
- 代碼
package main
import (
"fmt"
"github.com/BurntSushi/toml"
)
/*
toml 格式和ini 有點(diǎn)區(qū)別
相比之下茂翔,還是 toml讀取配置比較整齊一點(diǎn)
字符串加雙引號(hào)混蔼, 數(shù)組加 []履腋, 原來的ini 解析的,都不需要加 雙引號(hào)
*/
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 文件結(jié)構(gòu) */
type NacosCfg struct {
ServerConfig ServerConfig
ClientConfig ClientConfig
File File
Log Log
Option Option
}
/* nacos 服務(wù)端配置 */
type ServerConfig struct{
Endpoints [] string
}
/* nacos客戶端配置 */
type ClientConfig struct{
Namespace string // 命名空間ID
Group string // 組名:matrix
Username string
Passwd string
Timeout uint64 // 請求超時(shí)
NotLoadCacheAtStart bool // 開機(jī)不加載本地緩存配置
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服務(wù)端
[ServerConfig]
# 地址用多個(gè) , 號(hào)隔開
Endpoints = ["172.31.87.134:8848"]
# nacos客戶端
[ClientConfig]
Namespace = "3f7d98a2-ba3a-4f5b-b61b-4a3a48fbc380"
Group = "matrix"
Username = "tianyi-testpre"
Passwd = "Tiany1234%"
Timeout = 5000
# 開機(jī)加載本地緩存配置
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"
# 其他配置項(xiàng)
[Option]
UseNacos = true