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