golang读取配置文件

来源:互联网 发布:国际注册营养师 知乎 编辑:程序博客网 时间:2024/05/23 19:11

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

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

 

一.通过gopkg.in/ini.v1

go get  gopkg.in/ini.v1


1. 配置文件test.conf

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


2. 获取配置文件并转成结构体

 

package main import (  "log"  "gopkg.in/ini.v1")var filepath ="D:/goproject/src/test/test.conf" type Config struct {   //配置文件要通过tag来指定配置文件中的名称  MqttHostname string  `ini:"mqtt_hostname"`  MqttPort string  `ini:"mqtt_port"`  MqttUser string  `ini:"mqtt_user"`  MqttPass string  `ini:"mqtt_pass"`  MqttKeepaliveint    `ini:"mqtt_keepalive"`  MqttTimeout  int    `ini:"mqtt_timeout"`} func main() {  config,err := ReadConfig(filepath)   //也可以通过os.arg或flag从命令行指定配置文件路径  if err != nil {    log.Fatal(err)  }  log.Println(config)} //读取配置文件并转成结构体func ReadConfig(path string) (Config, error) {  var config Config  conf, err := ini.Load(path)   //加载配置文件  if err != nil {    log.Println("load config file fail!")    return config, err  }  conf.BlockMode = false  err = conf.MapTo(&config)   //解析成结构体  if err != nil {    log.Println("mapto config file fail!")    return config, err  }  return config, nil} 运行结果:
{127.0.0.1 8083 admin 123456 60 3}

 

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

1.获取第三方包:

go get github.com/larspensjo/config

2.配置文件config.ini

[mqtt]  #一级选项section#下面为optionmqtt_hostname = 127.0.0.1mqtt_port = 8083mqtt_user = adminmqtt_pass = 123456mqtt_keepalive = 60mqtt_timeout = 3


3. 获取配置文件并转成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 {    log.Fatalf("Fail to find %v,%v",*configFile,err)  }    ifcfg.HasSection("mqtt") {   //判断配置文件中是否有section(一级标签)     options,err := cfg.SectionOptions("mqtt")    //获取一级标签的所有子标签options(只有标签没有值)     if err == nil {     for _,v := range options{      optionValue,err := cfg.String("mqtt",v)  //根据一级标签section和option获取对应的值      if err == nil {        TOPIC[v] =optionValue      }     }   }  }  log.Println(TOPIC)}


 

4. 运行和结果:

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

 

 

  

 

 

原创粉丝点击