这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战
简介
INI是一个Go语言的ini文件操作库,支持各种文件格式,包括不限于.ini .cnf .gitconfig等等
一句语就是ini这个包,是用读取配置文件的
官方还专门弄了一个中文镜像站,方便中文区的同学查看文档,快速上手
特点:
- 支持覆盖加载多个数据源(file,
[]byte
,io.Reader
andio.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,所有配置包见下图: