yaml简单模板
type Host struct {
HostName string `yaml:"host"`
Addr string `yaml:"ip"`
}
type Hosts []Host
func (bs *Hosts) Read(filename string) error {
f, err := os.Open(filename)
if err != nil {
return err
}
b, err := io.ReadAll(f)
if err != nil {
return err
}
err = yaml.Unmarshal(b, bs)
return err
}
注意,要传指针(bs *Hosts) 这个地方。 yaml我是我比较喜欢的文件格式,可以直接导入struct,比较容易理解一些,个人觉得。
或者下面这种,读yaml配置文件的,感觉更简洁。
package main
import (
"log"
"os"
"gopkg.in/yaml.v2"
)
type Config struct {
AkStr string `yaml:"ak"`
Skstr string `yaml:"sk"`
// DbPassword string `yaml:"dbpassword"`
// DbHost string `yaml:"dbhost"`
// DbPort string `yaml:"dbport"`
}
func loadYaml(cfName string) Config {
f, err := os.Open(cfName)
if err != nil {
log.Fatalln("cannot open file,", err)
}
config := Config{}
err = yaml.NewDecoder(f).Decode(&config)
if err != nil {
log.Fatalln(err)
}
return config
}
如果格式解析报错,可以写个encode ,看看正常是编码成什么样的,达到stdout做个对比。
config := Config{
AkStr : "ak",
Skstr : "sk",
}
err := yaml.NewEncoder(os.Stdout).Encode(&config)
...