学习containerd,发现使用了toml格式配置文件,记录一下学习记录,
package main
import (
"fmt"
"time"
"github.com/BurntSushi/toml"
)
// 模拟文件内容
var content = `
[[song]]
Name = "Thunder Road"
duration = "4m49s"
year = 1992
[[song]]
name = "Stairway to Heaven"
duration = "8m03s"
year = 1991
`
// toml文件song字段数据结构定义,自适应大小写,也就是name/Name duration/Duration都能解析
type song struct {
Name string
Duration duration
// 变量名转换
AliasYear int `toml:"year"`
}
type songs struct {
Song []song
}
type duration struct {
time.Duration
}
func (d *duration) UnmarshalText(text []byte) error {
var err error
d.Duration, err = time.ParseDuration(string(text))
return err
}
func main() {
var favorites songs
if _, err := toml.Decode(content, &favorites); err != nil {
fmt.Printf("decode failed: %v\n", err)
}
fmt.Printf("parse result: %+v\n", favorites)
for _, s := range favorites.Song {
fmt.Printf("(%#v)\n", s)
}
}
原文参考:GitHub - BurntSushi/toml: TOML parser for Golang with reflection.