Viper--方便好用的Golang 配置库
发布时间:2020-12-16 09:34:17 所属栏目:大数据 来源:网络整理
导读:前言 本文主要是为读者介绍一个轻便好用的Golang配置库viper 正文 viper 的功能 ? viper 支持以下功能: ? 1. 支持Yaml、Json、 TOML、HCL 等格式的配置 ? 2. 可以从文件、io、环境变量、command line中提取配置 ? 3. 支持自动转换的类型解析 ? 4. 可以远程
前言
正文viper 的功能? viper 支持以下功能: 示例代码定义一个类型: type config struct { v *viper.Viper; } 用于测试的Yaml配置文件 TimeStamp: "2018-07-16 10:23:19" Author: "WZP" PassWd: "Hello" Information: Name: "Harry" Age: "37" Alise: - "Lion" - "NK" - "KaQS" Image: "/path/header.rpg" Public: false Favorite: Sport: - "swimming" - "football" Music: - "zui xuan min zu feng" LuckyNumber: 99 读取yaml配置文件func LoadConfigFromYaml (c *config) error { c.v = viper.New(); //设置配置文件的名字 c.v.SetConfigName("config") //添加配置文件所在的路径,注意在Linux环境下%GOPATH要替换为$GOPATH c.v.AddConfigPath("%GOPATH/src/") c.v.AddConfigPath("./") //设置配置文件类型 c.v.SetConfigType("yaml"); if err := c.v.ReadInConfig(); err != nil{ return err; } log.Printf("age: %s,name: %s n",c.v.Get("information.age"),c.v.Get("information.name")); return nil; } ? 注意:如果不用AddConfigPath去指定路径,它会在程序执行的目录去寻找config.yaml 从IO中读取配置//由IO读取配置 func ReadConfigFormIo(c *config) error { c.v = viper.New() if f,err := os.Open("config.yaml"); err != nil{ log.Printf("filure: %s",err.Error()); return err; }else { confLength,_ :=f.Seek(0,2); //注意,通常写c++的习惯害怕读取字符串的时候越界,都会多留出一个NULL在末尾,但是在这里不行,会报出如下错误: //While parsing config: yaml: control characters are not allowed //错误参考网址:https://stackoverflow.com/questions/33717799/go-yaml-control-characters-are-not-allowed-error configData := make([]byte,confLength); f.Seek(0,0); f.Read(configData); log.Printf("%sn",string(configData)) c.v.SetConfigType("yaml"); if err := c.v.ReadConfig(bytes.NewBuffer(configData)); err != nil{ log.Fatalf(err.Error()); } } log.Printf("age: %s,c.v.Get("information.name")); return nil; } ? 上面的代码是把配置文件中的数据导入IO,然后再从IO中读取 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |