加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 18:19:26 所属栏目:大数据 来源:网络整理
导读:最近go语言项目中用到读取配置文件,如下: 使用这个"github.com/BurntSushi/toml" 配置文件如下:conf.toml # idID = 1# nameName = "name1"# weightWeight = 1.7# booksBooks = ["a","b","c"]Sex = true#friend Friend都可以[friend]Age = 32Name = "xio"

最近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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读