• 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

  • 相关阅读:
    JSP动作元素你又知几多?
    一个简单的TCP/IP服务端客户端对话
    使用Graphics2D去除曲线锯齿状
    MySQL数据类型
    Eclipse常用快捷键
    C#中的委托和事件
    GitHub当道,菜鸟也为Git疯狂
    C++文件操作
    JSP指令你知多少?
    spring如何使用多个xml配置文件
  • 原文地址:https://www.cnblogs.com/feixiangmanon/p/11216553.html
Copyright © 2020-2023  润新知