Golang实践之博客(五) 读取配置文件|Go主题月 前言

前言

为何要使用配置文件?

  1. 数据集中管理,便于日后的维护
  2. 避免硬编码,更改内容,无需重新编译

目标

  • go-ini的使用
  • 调整读取配置文件数据

go-ini

功能特性

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

下载安装

1
shell复制代码go get gopkg.in/ini.v1

读取配置文件数据

新增ini配置文件

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
go复制代码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连接字符串调整为读取配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
go复制代码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端口号读取配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
go复制代码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 上启动服务
}

项目地址

github.com/panle666/Go…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%