golang读取配置文件

旧城等待, 2022-06-06 14:23 631阅读 0赞

在项目中往往将一些配置信息放到配置文件中,这样在不同的运行环境中,只需修改配置文件即可。

以下介绍两种通过第三方包获取配置文件的方式

一.通过gopkg.in/ini.v1

  1. go get gopkg.in/ini.v1
  1. 配置文件test.conf

    ;[mqtt]
    mqtt_hostname = 127.0.0.1
    mqtt_port = 8083
    mqtt_user = admin
    mqtt_pass = 123456
    mqtt_keepalive = 60
    mqtt_timeout = 3

  1. 获取配置文件并转成结构体
  1. package main
  2. import (
  3. "log"
  4. "gopkg.in/ini.v1"
  5. )
  6. var filepath ="D:/goproject/src/test/test.conf"
  7. type Config struct { //配置文件要通过tag来指定配置文件中的名称
  8. MqttHostname string `ini:"mqtt_hostname"`
  9. MqttPort string `ini:"mqtt_port"`
  10. MqttUser string `ini:"mqtt_user"`
  11. MqttPass string `ini:"mqtt_pass"`
  12. MqttKeepalive int `ini:"mqtt_keepalive"`
  13. MqttTimeout int `ini:"mqtt_timeout"`
  14. }
  15. func main() {
  16. config,err := ReadConfig(filepath) //也可以通过os.arg或flag从命令行指定配置文件路径
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. log.Println(config)
  21. }
  22. //读取配置文件并转成结构体
  23. func ReadConfig(path string) (Config, error) {
  24. var config Config
  25. conf, err := ini.Load(path) //加载配置文件
  26. if err != nil {
  27. log.Println("load config file fail!")
  28. return config, err
  29. }
  30. conf.BlockMode = false
  31. err = conf.MapTo(&config) //解析成结构体
  32. if err != nil {
  33. log.Println("mapto config file fail!")
  34. return config, err
  35. }
  36. return config, nil
  37. }
  38. 运行结果:
  39. {127.0.0.1 8083 admin 123456 60 3}

二、github.com/larspensjo/config 读取ini配置文件

1.获取第三方包:

  1. go get github.com/larspensjo/config

2.配置文件config.ini

  1. [mqtt] #一级选项section
  2. #下面为option
  3. mqtt_hostname = 127.0.0.1
  4. mqtt_port = 8083
  5. mqtt_user = admin
  6. mqtt_pass = 123456
  7. mqtt_keepalive = 60
  8. mqtt_timeout = 3
  1. 获取配置文件并转成map

    package main

    import (
    “flag”
    “runtime”
    “log”
    “github.com/larspensjo/config”
    )

    var(
    //https://studygolang.com/articles/686
    //支持命令行输入格式为-configfile=name, 默认为config.ini
    //配置文件一般获取到都是类型
    configFile = flag.String(“configfile”,”config.ini”,”General configuration file”)
    TOPIC = make(map[string]string)
    )

    func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    flag.Parse()

    cfg,err := config.ReadDefault(*configFile) //读取配置文件,并返回其Config

    if err != nil {

    1. log.Fatalf("Fail to find %v,%v",*configFile,err)

    }

    1. if cfg.HasSection("mqtt") { //判断配置文件中是否有section(一级标签)
    2. options,err := cfg.SectionOptions("mqtt") //获取一级标签的所有子标签options(只有标签没有值)
    3. if err == nil {
    4. for _,v := range options{
    5. optionValue,err := cfg.String("mqtt",v) //根据一级标签section和option获取对应的值
    6. if err == nil {
    7. TOPIC[v] =optionValue
    8. }
    9. }
    10. }

    }
    log.Println(TOPIC)
    }

  1. 运行和结果:

由于需要指定配置文件,故需要在命令行中运行

Center

发表评论

表情:
评论列表 (有 0 条评论,631人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Golang-读取文件

    Go读取文件一般有两种方式,一种方式是采用`os`包下的`os.open`函数进行流式读取,另一种方式是采用`ioutil`包的`ioutil.ReadFile`函数进行读取,

    相关 golang读取配置文件

    在项目中往往将一些配置信息放到配置文件中,这样在不同的运行环境中,只需修改配置文件即可。 以下介绍两种通过第三方包获取配置文件的方式   一.通过gopkg.in/ini