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

原文地址:https://www.cnblogs.com/feixiangmanon/p/11216553.html

时间: 2024-08-27 09:46:09

golang开发:类库篇(四)配置文件解析器goconfig的使用的相关文章

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

为什么要使用命令行 觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要. 其实,一个生产的项目命令行是绕不过去的.比如运营需要导出报表.统计下付费用户.服务不稳定修改下订单状态等等,再者,命令行的工具基本都是内部使用,调试日志可以随意点,退一万步来说,即使有问题了,还可以再次修改.不像API是是随机性的,有些业务发生错误和异常是随机的.不可逆的. 怎么使用cli 这个主要看下使用案例就一目了然了. 首先下载类库包 go ge

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

为什么要使用连接池 一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源.所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接时间,就能显著缩短请求时间. 所以就有了连接池的概念,在初始化时,创建一定数量的连接,先把所有连接存起来,然后,谁需要使用,从这里取走,干完活立马放回来. 如果请求数超出连接池容量,那么就排队等待或者直接丢弃掉.这样就可以省掉每次都创建和关闭连接的资源消耗和时间. 如果不使用连接池,那么,每次传输数

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

转自zsq 1.DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的.DOM 以及广义的基于树的处理具有几个优点.    首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

Go语言配置文件解析器,类似于Windows下的INI文件.

config Package config is a Configuration file parser for INI format 包 config 是一个简洁方的,支持注释的Go语言配置文件解析器,类似于Windows下的INI文件. 配置文件形式为[section] 的段构成, 内部使用 name=value键值对 如果为指定段节点,则默认放入名为[default]的段当中. "#"为注释的开头,可以放置于任意的单独一行中. 安装 go get github.com/lxmgo

parseConf(配置文件解析器)

1 /****************************************************************************** 2 * 3 * parseConf(配置文件解析器) 4 * 5 * 1. 很多时候,我们安装一些软件,都可以通过改一些软件的配置文件来修改程序的 6 * 运行性能,如Tomcat修改端口号,访问数据库时一些固定的参数等等; 7 * 2. 本Demo就是干着这么一件事,从properties.conf文件中取出键值对(keyvalue

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

configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置文件解析器语言,该语言提供的结构类似于 .ini 文件中的结构 ini文件相关知识 键值对可用 = 或者 : 进行分隔 section 的名字是区分大小写的,而 option 的名字是不区分大小写的 键值对中头部和尾部的空白符会被去掉 值可以为多行 配置文件可以包含注释,注释以 # 或者 ; 为前缀

【原创】开源Math.NET基础数学类库使用(四)C#解析Matrix Marke数据格式

开源Math.NET系列文章目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍  2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算  3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式 4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式 5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式 6.开源.NET基础数学类库使用Mat

iOS开发网络篇—数据的解析

网络上传输数据通用的有XML,JSON等,iOS中也可以用Plist. 要进行数据传输,就要首先进行序列化: 1.序列化. 对象转换成二进制流.(这个一句话就行) 2.反序列化. 二进制流转换为对象等. (关键要弄清楚这个) JSON:(和XML一样都是用来传数据的) 轻量级的数据交换格式,正在逐步取代XML. XML: 结构性的标记语言,易读.但数据量大. Plist偶尔用着玩玩: Mac.iOS中用的多一种格式. 一.应用场景 1.XML的应用场景: XMPP——即时通讯,KissXML R

Python爬虫(十四)_BeautifulSoup4 解析器

CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而Beautiful Soup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml. BeautifulSoup用来解析HTML比较简单,API非常人性化,支持CSS选择器.Python标准库中的HTML解析器,也支持lxml的XML解析器.