go语言学习之----读取配置文件的方式toml

最近go语言项目中用到读取配置文件,如下:

使用这个"github.com/BurntSushi/toml" 

配置文件如下:conf.toml

# id
ID = 1
# name
Name = "name1"
# weight
Weight = 1.7
# books
Books = ["a", "b", "c"]
Sex = true

#friend Friend都可以
[friend]
Age = 32
Name = "xio"


代码如下 readConf.go:

package conf

import (
	"fmt"
	"github.com/BurntSushi/toml"
	"io/ioutil"
	"os"
)

// person
type Person struct {
	ID     uint32
	Sex    bool
	Name   string
	Weight float32
	Friend *Friends
	Books  []string
}

// friends
type Friends struct {
	Age  int
	Name string
}

func ReadConf(fname string) (p *Person, err error) {
	var (
		fp       *os.File
		fcontent []byte
	)
	p = new(Person) // &Person{}
	if fp, err = os.Open(fname); err != nil {
		fmt.Println("open error ", err)
		return
	}

	if fcontent, err = ioutil.ReadAll(fp); err != nil {
		fmt.Println("ReadAll error ", err)
		return
	}

	if err = toml.Unmarshal(fcontent, p); err != nil {
		fmt.Println("toml.Unmarshal error ", err)
		return
	}
	return
}


测试代码如下 readConf_test.go:

package conf

import "testing"

func TestReadConf(t *testing.T) {
	p, err := ReadConf("./conf.toml")
	if err != nil {
		t.Logf("%v", err)
	}

	t.Logf("person %v", p)
	t.Logf("person.friend %v", p.Friend)
}

输出结果为:

[ `go test -v` | done: 2.6748515s ]
  === RUN   TestReadConf
  --- PASS: TestReadConf (0.00s)
    readConf_test.go:11: person &{1 true name1 1.7 0x1218c570 [a b c]}
    readConf_test.go:12: person.friend &{32 xio}
  PASS
  ok    goProgram/conf  0.458s


细节点:

1 结构体的成员首字母大写

2 配置文件的配置项须与结构体成员名一样

3 支持bool, int, float , 字符串,字符串数组...等,

    也可以包含其他结构体 如[Friend] 


附:学习链接

https://item.congci.com/-/content/toml-ji-jian-de-peizhiwenjian-geshi

https://github.com/toml-lang/toml

相关文章
相关标签/搜索