Go --- toml配置文件使用

BurntSushi/toml

我们常见的一些配置文件包括,yaml、xml、toml、json和ini。

今天我们就来介绍这个toml配置文件,在go语言中的使用。

注:我选择toml的原因是toml配置简单,注释方便,读取方便。

包介绍

toml(Tom’s Obvious, Minimal Language),简约又明显的语言。

使用的包是

github.com/BurntSushi/toml

安装该包

go get github.com/BurntSushi/toml@latest

使用列子

我们一般将配置文件中的字段映射到结构体中,这也方便了使用者的使用过程。

  1. 简单例子

    test.toml文件

    Name = "张三"
    Age = 18
    Money = 1.2
    Hobby = ["打游戏","去医院疗伤"]
    Birthday = 2023-01-05
    

    toml_test.go

    package test
    
    import (
       "fmt"
       "github.com/BurntSushi/toml"
       "os"
       "testing"
       "time"
    )
    
    type Config struct {
       Name     string
       Age      int
       Money    float64
       Hobby    []string
       Birthday time.Time
    }
    
    func TestToml1(t *testing.T) {
       f := "../conf/test.toml"
       if _, err := os.Stat(f); err != nil {
          panic(err)
       }
       var conf Config
    
       if _, err := toml.DecodeFile(f, &conf); err != nil {
          panic(err)
       }
    
       fmt.Printf("Name: %v\n", conf.Name)
       fmt.Printf("Age: %v\n", conf.Age)
       fmt.Printf("Money: %v\n\r", conf.Money)
       fmt.Printf("Hobby: %v\n\r", conf.Hobby)
       fmt.Printf("Birthday: %v\n\r", conf.Birthday)
    }
    

    输出

    Name: 张三
    Age: 18
    Money: 1.2
    Hobby: [打游戏 去医院疗伤]
    Birthday: 2023-01-05 00:00:00 +0800 CST

  2. 对象数组

    test.toml

    distros = [
        {name = "Arch Linux", packages = "pacman"},
        {name = "Void Linux", packages = "xbps"},
        {name = "Debian",     packages = "apt"},
    ]
    

    toml_test.go

    package test
    
    import (
       "fmt"
       "github.com/BurntSushi/toml"
       "os"
       "testing"
       "time"
    )
    
    type (
       example struct {
          Distros []distro
       }
       distro struct {
          Name string
          Pkg  string `toml:"Packages"`
       }
    )
    
    
    var f = "../conf/test.toml"
    
    // 对象数组
    func TestToml2(t *testing.T) {
       if _, err := os.Stat(f); err != nil {
          panic(err)
       }
       var conf example
    
       if _, err := toml.DecodeFile(f, &conf); err != nil {
          panic(err)
       }
       fmt.Println(conf)
    }
    
  3. map映射

    test.toml

    ## test1
    #Name = "张三"
    #Age = 18
    #Money = 1.2
    #Hobby = ["打游戏","去医院疗伤"]
    #Birthday = 2023-01-05
    
    #test2
    
    distros = [
        {name = "Arch Linux", packages = "pacman"},
        {name = "Void Linux", packages = "xbps"},
        {name = "Debian",     packages = "apt"},
    ]
    
    [[characters.star-trek]]
    name = "James Kirk"
    rank = "Captain"
    [[characters.star-trek]]
    name = "Spock"
    rank = "Science officer"
    

    toml_test.go

    package test
    
    import (
       "fmt"
       "github.com/BurntSushi/toml"
       "os"
       "testing"
       "time"
    )
    
    type (
       example struct {
          Distros    []distro
          Characters map[string][]struct {
             Name string
             Rank string
          }
       }
       distro struct {
          Name string
          Pkg  string `toml:"Packages"`
       }
    )
    
    var f = "../conf/test.toml"
    
    // map映射
    func TestToml3(t *testing.T) {
       if _, err := os.Stat(f); err != nil {
          panic(err)
       }
       var conf example
    
       if _, err := toml.DecodeFile(f, &conf); err != nil {
          panic(err)
       }
       fmt.Println(conf)
    }
    

结语

想要了解更多请点击:go-pkg toml

参考资料:BurntSushi/toml: TOML parser for Golang with reflection. (github.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值