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)
      ...
posted @ 2022-04-23 11:47  过去的我  阅读(192)  评论(0编辑  收藏  举报