golang开发:类库篇(四)配置文件解析器goconfig的使用
为什么要使用goconfig解析配置文件
目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量。例如,生产环境跟测试环境使用同一份配置,但是相应的环境下的变量的值是不一样的,通过环境获其取对应的的key value。没明白没关系,举例子的时候就明白了。
PHP的框架yaf。golang的框架beego。对配置的书写和解析基本都是一致的。
看下goconfig的解释
goconfig 是一个易于使用,支持注释的 Go 语言配置文件解析器,该文件的书写格式和 Windows 下的 INI 文件一样。
配置文件由形为 [section] 的节构成,内部使用 name:value 或 name=value 这样的键值对;每行开头和尾部的空白符号都将被忽略;如果未指定任何节,则会默认放入名为 DEFAULT 的节当中;可以使用 “;” 或 “#” 来作为注释的开头,并可以放置于任意的单独一行中。
举个栗子一目了然
怎么使用 goconfig
先写一个常用的配置conf.ini
;redis cache
USER_LIST = USER:LIST
MAX_COUNT = 50
MAX_PRICE = 123456
IS_SHOW = true
[test]
dbdns = root:@tcp(127.0.0.1:3306)
[prod]
dbdns = root:@tcp(172.168.1.1:3306)
然后我们读取这个配置
package main
import (
"log"
"github.com/Unknwon/goconfig"
"fmt"
)
func main() {
cfg, err := goconfig.LoadConfigFile("./conf.ini")
if err != nil {
log.Fatalf("无法加载配置文件:%s", err)
}
userListKey, err := cfg.GetValue("","USER_LIST")
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(userListKey)
userListKey2,_ := cfg.GetValue(goconfig.DEFAULT_SECTION, "USER_LIST")
fmt.Println(userListKey2)
maxCount := cfg.MustInt("","MAX_COUNT")
fmt.Println(maxCount)
maxPrice := cfg.MustFloat64("","MAX_PRICE")
fmt.Println(maxPrice)
isShow := cfg.MustBool("","IS_SHOW")
fmt.Println(isShow)
db := cfg.MustValue("test","dbdns")
fmt.Println(db)
dbProd := cfg.MustValue("prod","dbdns")
fmt.Println(dbProd)
//set 值
cfg.SetValue("","MAX_NEW","10")
maxNew := cfg.MustInt("","MAX_NEW")
fmt.Println(maxNew)
maxNew1,err := cfg.Int("","MAX_NEW")
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(maxNew1)
}
cfg.DeleteKey("", "MAX_NEW")
执行下结果
go build -o test.bin
./test.bin
USER:LIST
USER:LIST
50
123456
true
root:@tcp(127.0.0.1:3306)
root:@tcp(172.168.1.1:3306)
10
10
跟预想的结果一致。
文档上把用法讲的很清楚
函数 LoadConfigFile 加载一个或多个文件,然后返回一个类型为 ConfigFile 的变量。
GetValue 可以简单的获取某个值。
像 Bool、Int、Int64 这样的方法会直接返回指定类型的值。
以 Must 开头的方法不会返回错误,但当错误发生时会返回零值。
SetValue 可以设置某个值。
DeleteKey 可以删除某个键。
最后,SaveConfigFile 可以保持您的配置到本地文件系统。
使用方法 Reload 可以重载您的配置文件。
几个注意的地方
1.配置符号可以使用=,也可以使用 :
2.section的部分可以设置一个系统常量,测试环境的值是test,生产环境的值是prod,就不用调用的时候区别环境变量。
cfg.MustValue(ENV,"dbdns")
如果需要了解更详细的使用,看下文档
https://github.com/Unknwon/goconfig
golang开发:类库篇(四)配置文件解析器goconfig的使用的更多相关文章
- golang开发:环境篇(四)包管理器 glide的使用
glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布. 为什么要使用glide 平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取 ...
- golang开发:类库篇(五)go测试工具goconvey的使用
为什么要使用goconvey测试程序 goconvey 集成go test,go test 无缝接入.管理运行测试用例,而且提供了丰富的函数断言.非常友好的WEB界面,直观的查看测试结果. 如果没有g ...
- golang开发:类库篇(一) Zap高性能日志类库的使用
为什么要用zap来写日志 原来是写PHP的,一直用的error_log,第一次写Go项目的时候,还真不知道该怎么写日志,后来就按照PHP的写法自己不成规范的捣鼓写.去了新公司之后,发现用的是zap.后 ...
- golang开发:类库篇(三)命令行工具cli的使用
为什么要使用命令行 觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要. 其实,一个生产的项目命令行是绕不过去的.比如运营需要导 ...
- golang开发:类库篇(二) Redis连接池的使用
为什么要使用连接池 一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源.所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接 ...
- parseConf(配置文件解析器)
/****************************************************************************** * * parseConf(配置文件解析 ...
- python接口自动化测试 - configparser配置文件解析器详细使用
configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...
- XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定 ...
- XML的四种解析器原理及性能比较
转自zsq 1.DOM DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分 ...
随机推荐
- 搭建svn服务器&服务器客户端使用笔记
参考借鉴文章:http://www.cnblogs.com/vijayfly/p/5711962.html 之前尝试着用git管理公司代码,但被一个问题困惑了很久无法解决,那就是git该如何只pull ...
- 危险的DDD聚合根
原文:危险的DDD聚合根 DDD的核心是聚合.这没有问题,大家都认同.但关于DDD中的聚合方式,其实我还是有些担心,下面说说我的想法,希望大家参与讨论.其实当初第一次看到DDD中关于聚合根部分论述的时 ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- Git基本用法(二)
比较内容 git diff [--cached] 参见上节 git diff <分支1> <分支2> 比较两个分支的不同 git diff <分支名> <文件 ...
- 静态dll的问题终于搞定了
导入plugin,构建qapplicationhttps://forum.qt.io/topic/60940/qt-static-dll-x64-using-qapplication-issues/2 ...
- Ptypes一个开源轻量级的c++库,包括对一些I/O操作、网络通信、多线程和异常处理的封装
C++开源项目入门级:Ptypes Ptypes一个开源轻量级的c++库,包括对一些I/O操作.网络通信.多线程和异常处理的封装.虽然代码有限,包括的内容不少,麻雀虽小,五脏俱全. 提高: ...
- 使用C++还是QML(QML容易使用和维护,效果好)
本质上,Qt 是一个C++类库.在引入 QML 以前,所有的开发都是基于 C++ 的,但到了 Qt 5,QML 和 Qt Quick 成为了 Qt 的核心之一,导致很多初学者在犹豫是否还需要学习 C+ ...
- 做了一个浏览指定文件格式的 TreeView(方便查看Source目录下的源码)
unit DirTreeView; interface uses SysUtils, Classes, Controls, Forms, ComCtrls; type TDirTreeView ...
- select Demo
#include <iostream> #include <WinSock2.h> using namespace std; #pragma comment(lib, &quo ...
- 适配DirectFB到qt4.8.5(嵌入式Linux)
适配DirectFB到qt4.8.5 1.编译qt4.8.5 这部在qt官网上其实已经有较详细的说明,了解更多,请点击链接进入. 首先是配置选项,如下是我的配置选项: ./configure \ -p ...