
toml配置文件的使用方法:toml.DecodeFile
发布日期:2021-05-06 03:46:13
浏览次数:14
分类:技术文章
本文共 3978 字,大约阅读时间需要 13 分钟。
第三方库https://github.com/BurntSushi/toml
列1
1.创建结构体
package mainimport ( "fmt" "github.com/BurntSushi/toml" "time")type config struct { Title string DB mysql `toml:"mysql"` App app Redis map[string]redis Releases releases Company company}type app struct { Author string Org string `toml:"organization"` Mark string Release time.Time}type mysql struct { Server string Ports []int ConnMax int `toml:"connection_max"` Enabled bool}type redis struct { Host string Port int}type releases struct { Release []string Tags [][]interface{ }}type company struct { Name string Detail detail}type detail struct { Type string Addr string ICP string}
2.配置信息:conf.toml
# 全局信息title = "config"# 应用信息[app] author = "史布斯" organization = "Mafool" release = 2020-05-27T07:32:00Z # 时间# 数据库配置[mysql] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] # 数组 connection_max = 5000 enabled = true# Redis主从# 字典对象[redis] [redis.master] host = "10.0.0.1" port = 6379 [redis.slave] host = "10.0.0.1" port = 6380# 二维数组[releases] release = ["dev", "test", "stage", "prod"] tags = [["dev", "stage", "prod"],[2.2, 2.1]]# 公司信息#对象嵌套[company] name = "xx科技"[company.detail] type = "game" addr = "北京朝阳" icp = "030173"
3.测试
func main() { var conf config if _, err := toml.DecodeFile("./conf.toml", &conf); err != nil { panic(err) } fmt.Printf("全局信息: %+v\n\n", conf.Title) fmt.Printf("App信息:%+v\n\n", conf.App) fmt.Printf("Mysql配置:%+v\n\n", conf.DB) fmt.Printf("版本信息:%+v\n\n", conf.Releases) fmt.Printf("Redis主从:%+v\n\n", conf.Redis) fmt.Printf("企业信息:%+v\n\n", conf.Company)}
4.输出
全局信息: configApp信息:{ Author:史布斯 Org:Mafool Mark: Release:2020-05-27 07:32:00 +0000 UTC}Mysql配置:{ Server:192.168.1.1 Ports:[8001 8001 8002] ConnMax:5000 Enabled:true}版本信息:{ Release:[dev test stage prod] Tags:[[dev stage prod] [2.2 2.1]]}Redis主从:map[master:{ Host:10.0.0.1 Port:6379} slave:{ Host:10.0.0.1 Port:6380}]企业信息:{ Name:xx科技 Detail:{ Type:game Addr:北京朝阳 ICP:030173}}
列2
1.主结构
package mainimport ( "fmt" "time" "github.com/BurntSushi/toml")//总的配置信息type tomlConfig struct { Title string Owner owner DB database `toml:"database"` Servers map[string]server Clients clients}//用户信息type owner struct { Name string Org string `toml:"organization"` Bio string DOB time.Time}//数据库相关信息type database struct { Server string Ports []int ConnMax int `toml:"connection_max"` Enabled bool}//服务器信息type server struct { IP string DC string}//客户端信息type clients struct { Data [][]interface{ } Hosts []string}
2.example.toml配置信息
# This is a TOML document. Boom.title = "TOML Example"[owner]name = "Tom Preston-Werner"organization = "GitHub"bio = "GitHub Cofounder & CEO Likes tater tots and beer."dob = 1979-05-27T07:32:00Z # First class dates? Why not?[database]server = "192.168.1.1"ports = [ 8001, 8001, 8002 ]connection_max = 5000enabled = true[servers][servers.alpha]ip = "10.0.0.1"dc = "eqdc10"[servers.beta]ip = "10.0.0.2"dc = "eqdc10"[clients]data = [ ["gamma", "delta"], [1, 2] ]# Line breaks are OK when inside arrayshosts = ["alpha", "omega"]
3.测试
func main() { //设置结构体对象 var config tomlConfig //对结构体对象填充信息,文件信息在example.toml上 if _, err := toml.DecodeFile("./example.toml", &config); err != nil { fmt.Println(err) return } //输出标题,全局信息 fmt.Printf("Title: %s\n", config.Title) //输出owner相关信息 fmt.Printf("Owner: %s (%s, %s), Born: %s\n", config.Owner.Name, config.Owner.Org, config.Owner.Bio, config.Owner.DOB) //输出数据库相关信息 fmt.Printf("Database: %s %v (Max conn. %d), Enabled? %v\n", config.DB.Server, config.DB.Ports, config.DB.ConnMax, config.DB.Enabled) //输出服务器相关信息 for serverName, server := range config.Servers { fmt.Printf("Server: %s (%s, %s)\n", serverName, server.IP, server.DC) } //输出客户端相关信息 fmt.Printf("Client data: %v\n", config.Clients.Data) fmt.Printf("Client hosts: %v\n", config.Clients.Hosts)}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月16日 22时57分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!