Go使用ini加载读取配置文件


Go 使用init加载读取配置文件
使用ini包
import ("gopkg.in/ini.v1")
简单操作代码如下
import(
"gopkg.in/ini.v1"
   "time"
)
ConfigRoute, err := ini.Load("config/app.ini")
if err != nil {
fmt.Println(err)
fmt.Println("--------- 加载配置文件失败 ---------")
}
// // 获取mysql分区的key
sqlType := ConfigRoute.Section("mysql")

// 获取特定分区下的数据
MylHost := sqlType.Key("HOST").String()
MylDb := sqlType.Key("DB").String()
MylUser := sqlType.Key("USER").String()
MylPassword := sqlType.Key("PASSWORD").String()
fmt.Println(MylHost, MylDb, MylUser, MylPassword)

timeStr := time.Now().Format("2006-01-02 15:04:05")  // 时间格式化
//port := ConfigRoute.Section("web").Key("PORT").ValueWithShadows() // 得到的是相同key:PORT的所有数据,slice
//port := ConfigRoute.Section("web").Key("PORT").Value()
port := ConfigRoute.Section("web").Key("PORT").Strings(",") // 通过 , 分割,得到一个slice
host := ConfigRoute.Section("web").Key("HOST").String()
for _, i := range port{
//fmt.Println("port:", i, "--- type:", reflect.TypeOf(i))
addr := host+":"+i
go http.ListenAndServe(addr, router)
fmt.Println(timeStr, "服务启动成功, host:",host, " port:",i)

}
// 修改某个值然后进行保存
ConfigRoute.Section("RUNTIME").Key("LastRunTime").SetValue(timeStr)
_ = ConfigRoute.SaveTo("config/app.ini")

进阶,将ini文件反射到结构体中
// 读取配置的文件代码
// 将数据源的内容映射到结构体中
db := new(models.DataBase)  // 需要在文件开头先导入结构体的包名
err = ConfigRoute.Section("mysql").MapTo(db)
fmt.Println("-----------------", db)
fmt.Println("-----------------", db.USER)
fmt.Println("-----------------", db.HOST)

web := new(models.WebServer)
err = ConfigRoute.Section("web").MapTo(web)
fmt.Println("-----------------", web)
fmt.Println("-----------------", web.HOST)
fmt.Println("-----------------", web.PORT)
for _, port := range web.PORT{
   fmt.Println("port ", port)
}

// 结构体的代码
package models

type DataBase struct {
TYPE string
HOST string
DB string
USER string
PASSWORD string
}

type WebServer struct {
HOST string
PORT []string
}

 

欢迎关注公众号,扫码--->