Go语言搬砖 ini配置文件库

1,115 阅读2分钟

这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战

image.png

简介

INI是一个Go语言的ini文件操作库,支持各种文件格式,包括不限于.ini .cnf .gitconfig等等

一句语就是ini这个包,是用读取配置文件的

官方还专门弄了一个中文镜像站,方便中文区的同学查看文档,快速上手

特点:

  • 支持覆盖加载多个数据源(file, []byteio.Reader and io.ReadCloser
  • 支持递归读取键值
  • 支持读取父子分区
  • 支持读取自增键名
  • 支持读取多行的键值
  • 支持大量辅助方法
  • 支持在读取时直接转换为 Go 语言类型
  • 支持读取和 写入 分区和键的注释
  • 轻松操作分区、键值和注释
  • 在保存文件时分区和键值会保持原有的顺序

INI官网传送门: github.com/go-ini/ini

安装

因为是Go的包,提前下载也行,在代码编辑器里面 引入再同步也行,

提前下载的话命令如下:

go get gopkg.in/ini.v1

代码编辑器引入

import (
   "gopkg.in/ini.v1"
)

使用

首先我们创建一个config.ini的配置文件,大概内容如下:

app_mode = development
[mysql]
host = ip
port = 3306
dbname =  curdDemo
username = root
password = 666666
conf = charset=utf8mb4&parseTime=True&loc=Local

然后创建一个config.go的文件来读取配置文件,并将值赋值到全局变量

使用init函数使配置文件在项目启动时加载

var (
   MyHost string
   MyPort string
   MyDB   string
   MyUser string
   MyPass string
   MyConf string
   MyPath = MyHost + MyPort
)
func init() {
   cfg, err := ini.Load("config.ini")
   if err != nil {
      log.Fatalln(err)
   }
   fmt.Println(cfg.Section("").Key("app_mode"))
   MyHost = cfg.Section("mysql").Key("host").String()
   MyPort = cfg.Section("mysql").Key("port").String()
   MyDB = cfg.Section("mysql").Key("dbname").String()
   MyUser = cfg.Section("mysql").Key("username").String()
   MyPass = cfg.Section("mysql").Key("password").String()
   MyConf = cfg.Section("mysql").Key("conf").String()
}

在这里没使用app_mode,表明使用的全局

init包在调用Load方法,将返回一个File结构体,然后使用File结构体内方法Section来读取配置文件k/v

上述代码变量全部使用大写字母开头,是为了跨包调用,方便其它包路径下使用


接下来使用这些配置文件,直接在方法中调用

其中MyUser等这种My开头的全部是上面代码中定义好的变量名称

这里虽然是以mysql为例,但如果换成redis,mongo等等其它组件,操作都是一样的

func SetupDb() *gorm.DB {
   dsn := config.MyUser + ":" + config.MyPass + "@tcp(" + config.MyHost + ":" + config.MyPort + ")/" + config.MyDB + "?" + config.MyConf
   Db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if err != nil {
      log.Fatalf("数据库连接失败,错误日志: v%", err)
   }
   log.Println("mysql连接成功,配置信息: v%",dsn)
   Db.AutoMigrate(&model.User{})

   return Db
}

至此,配置读取并使用结束,,可以感受到INI这个包的强大和简单之处

除了INI包外,Go语言中常用的配置包还有很多,知名度较高的有Viper,toml,GoDotEnv,所有配置包见下图:

image.png