为什么要使用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的使用的更多相关文章

  1. golang开发:环境篇(四)包管理器 glide的使用

    glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布. 为什么要使用glide 平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取 ...

  2. golang开发:类库篇(五)go测试工具goconvey的使用

    为什么要使用goconvey测试程序 goconvey 集成go test,go test 无缝接入.管理运行测试用例,而且提供了丰富的函数断言.非常友好的WEB界面,直观的查看测试结果. 如果没有g ...

  3. golang开发:类库篇(一) Zap高性能日志类库的使用

    为什么要用zap来写日志 原来是写PHP的,一直用的error_log,第一次写Go项目的时候,还真不知道该怎么写日志,后来就按照PHP的写法自己不成规范的捣鼓写.去了新公司之后,发现用的是zap.后 ...

  4. golang开发:类库篇(三)命令行工具cli的使用

    为什么要使用命令行 觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要. 其实,一个生产的项目命令行是绕不过去的.比如运营需要导 ...

  5. golang开发:类库篇(二) Redis连接池的使用

    为什么要使用连接池 一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源.所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接 ...

  6. parseConf(配置文件解析器)

    /****************************************************************************** * * parseConf(配置文件解析 ...

  7. python接口自动化测试 - configparser配置文件解析器详细使用

    configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...

  8. XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]

    1)DOM(JAXP Crimson解析器)    DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定 ...

  9. XML的四种解析器原理及性能比较

    转自zsq 1.DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分 ...

随机推荐

  1. 【JDK源码分析】String的存储区与不可变 专题

    <Think in Java>中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”. "=="判断的是两个对象的内存地址是否一样,适用于 ...

  2. ThinkPHP 提供Auth 权限管理、支付宝、微信支付、阿里oss、友盟推送、融云即时通讯、云通讯短信、Email、Excel、PDF 等等

    多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支付宝.微信支付.阿里oss. ...

  3. 如何在 Xcode 中进行 Qt 开发(可使用使用 Homebrew 来安装qt)

    第一步 安装 Qt 分为两种情况: 1. 希望使用 Qt Quick 等先进Qt5技术, 2. 只需要 Qt 4.8的类库即可. 第一种, 直接去官网下载 Mac安装包, 在此不作过多说明, 开发时也 ...

  4. InnoExtractor可以解压一些安装文件,以获得其中的特殊文件

    you can use InnoExtractor unpack the installer file and get uniSimpleEnc.dcu file. https://www.board ...

  5. 浅谈Linux(Centos7.4)环境下NTP服务器的构建

     一.软件环境 1.操作系统版本 [root@Geeklp201 etc]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core ...

  6. Mariadb的安装与使用

    一.安装Mariadb 参考博客:https://www.cnblogs.com/pyyu/p/9467289.html 安装软件的三中方式 yum原码编译安装下载rpm安装 yum与原码编译安装安装 ...

  7. DNS之缓存服务器部署流程

    环境介绍 [root@dns ~]# cat /etc/centos-releaseCentOS release 6.6 (Final)[root@dns ~]# ifconfig eth0|sed ...

  8. Laravel --- 要点笔记

    一.路由: // 常规用法 Route::get('/',function(){ return 'get'; }) // 匹配多个 Route::match(['get','post'],'/',fu ...

  9. Python自学day-2

    一.模块     模块分两种:标准库和第三方库,标准库是不需要安装就可以使用的库.     import [模块名]:导入一个库,优先是在项目路径中寻找.自定义模块名不要和标准库模块名相同.   sy ...

  10. PATA 1009. Product of Polynomials (25)

    1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...