前言
为何要使用配置文件?
- 数据集中管理,便于日后的维护
- 避免硬编码,更改内容,无需重新编译
目标
- go-ini的使用
- 调整读取配置文件数据
go-ini
功能特性
- 支持覆盖加载多个数据源(file, []byte, io.Reader and io.ReadCloser)
- 支持递归读取键值
- 支持读取父子分区
- 支持读取自增键名
- 支持读取多行的键值
- 支持大量辅助方法
- 支持在读取时直接转换为 Go 语言类型
- 支持读取和 写入 分区和键的注释
- 轻松操作分区、键值和注释
- 在保存文件时分区和键值会保持原有的顺序
下载安装
go get gopkg.in/ini.v1
读取配置文件数据
新增ini配置文件
[server]
HTTP_PORT = :8888
[database]
TYPE = mysql
USER = root
PASSWORD =
#127.0.0.1:3306 数据库IP:数据库端口号
HOST = 127.0.0.1:3306
NAME = blog
新增ConfigService
package ConfigService
import (
"fmt"
"gopkg.in/ini.v1"
"os"
)
type DbInfo struct {
TYPE string
USER string
PASSWORD string
HOST string
NAME string
HTTP_PORT string
}
func GetAppConfig(key string) *DbInfo {
cfg, err := ini.Load("Config/app.ini")
if err != nil {
fmt.Printf("Fail to read file: %v", err)
os.Exit(1)
}
d := new(DbInfo)
_ = cfg.Section(key).MapTo(d)
return d
}
func GetServerConfig() *DbInfo {
return GetAppConfig("server")
}
func GetDbConfig() *DbInfo {
return GetAppConfig("database")
}
DbService连接字符串调整为读取配置
package DbService
import (
"fmt"
"golang-blog/Model/Entity"
"golang-blog/Service/ConfigService"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var Db *gorm.DB
func ConnectDb() {
var (
err error
)
dbConfig := ConfigService.GetAppConfig("database")
connectStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local", dbConfig.USER,
dbConfig.PASSWORD,
dbConfig.HOST, dbConfig.NAME)
Db, err = gorm.Open(mysql.Open(connectStr), &gorm.Config{})
if err != nil {
panic(err)
}
// 自动生成表结构
dbErr := Db.AutoMigrate(&Entity.UserEntity{})
if dbErr != nil {
println(err)
}
}
Routers端口号读取配置文件
package Routers
import (
"github.com/gin-gonic/gin"
"golang-blog/Controller/HomeControoler"
"golang-blog/Service/ConfigService"
)
func Init(router *gin.Engine) {
home := router.Group("Home")
// 1.首位多余元素会被删除(../ or //);
//2.然后路由会对新的路径进行不区分大小写的查找;
//3.如果能正常找到对应的handler,路由就会重定向到正确的handler上并返回301或者307.(比如: 用户访问/FOO 和 /..//Foo可能会被重定向到/foo这个路由上)
router.RedirectFixedPath = true
{
home.GET("/", HomeControoler.Index)
home.GET("/Hi", HomeControoler.Hi)
}
serverConfig := ConfigService.GetServerConfig()
router.Run(serverConfig.HTTP_PORT) // 监听并在 127.0.0.1:8888 上启动服务
}