go 写入yaml_Go 处理yaml类型的配置文件

本文介绍了如何使用Go语言读取和操作yaml格式的配置文件。通过`config_yaml`包,实现了加载yaml文件、获取不同类型的配置值以及将配置映射到自定义结构体的功能。文章还探讨了反射在Go语言中的应用,包括接口值、动态类型和值,以及如何通过反射修改值。
摘要由CSDN通过智能技术生成

先说一下,这里用到了很多关于反射类型的功能,可能刚开始看代码,如果对反射不熟悉的可能会不是非常清晰,但是同时也是为了更好的理解golang中的反射,同时如果后面想在代码中可以直接从我的git地址get:

go get github.com/pythonsite/config_yaml

直接上代码:

//可以用于处理读yaml格式的配置文件,同时也可以用于理解golang中的反射

package config_yaml

import ("strings"

"errors"

"io/ioutil"

"gopkg.in/yaml.v2"

"reflect"

"fmt"

"strconv")

type ConfigEngine struct {

data map[interface{}]interface{}

}//将ymal文件中的内容进行加载

func (c*ConfigEngine) Load (path string) error {

ext :=c.guessFileType(path)if ext == ""{

return errors.New("cant not load" + path + " config")

}

return c.loadFromYaml(path)

}//判断配置文件名是否为yaml格式

func (c*ConfigEngine) guessFileType(path string) string {

s := strings.Split(path,".")

ext := s[len(s) - 1]

switch ext {case "yaml","yml":

return"yaml"}

return""}//将配置yaml文件中的进行加载

func (c*ConfigEngine) loadFromYaml(path string) error {

yamlS,readErr :=ioutil.ReadFile(path)if readErr !=nil {

return readErr

}//yaml解析的时候c.data如果没有被初始化,会自动为你做初始化

err := yaml.Unmarshal(yamlS, &c.data)if err !=nil {

return errors.New("can not parse "+ path + " config")

}

return nil

}//从配置文件中获取值

func (c*ConfigEngine) Get(name string) interface{}{

path := strings.Split(name,".")

data :=c.data

for key, value :=range path {

v, ok :=data[value]if !ok {

break

}if (key + 1) ==len(path) {

return v

}if reflect.TypeOf(v).String() == "map[interface {}]interface {}"{

data=v.(map[interface {}]interface {})

}

}

return nil

}//从配置文件中获取string类型的值

func (c*Confi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值