Gin框架: 使用go-ini配置参数与不同环境下的配置部署

关于 INI 配置文件与go-ini


1 )概述

2 )使用

新建配置文件 conf/app.ini

app_name   =  xxproject
log_level  = DEBUG # possible values: DEBUG, INFO, WARNING, ERROR, FATAL
admin_path = /admin

[mysql]
ip       = 192.168.0.6
port     = 3306
user     = root
password = 123456
database = gin

[redis]
ip   = 127.0.0.1
port = 6379

在 main.go 文件中测试核心代码

package main

import (
	"gopkg.in/ini.v1"
	"github.com/gin-gonic/gin"
)

func main() {
   
	// 创建一个默认的路由引擎
	r := gin.Default()

	//演示 "gopkg.in/ini.v1"模块的使用
	config, err := ini.Load("./conf/app.ini")
	 if err != nil {
   
	 	fmt.Printf("Fail to read file: %v", err)
	 	os.Exit(1)
	}

	// 获取ini里面的配置
	fmt.Println(config.Section("").Key("app_name").String())
	fmt.Println(config.Section("mysql").Key("password").String())
	fmt.Println(config.Section("redis").Key("ip").String())

	// 给ini写入数据
	config.Section("").Key("app_name").SetValue("yyyproject")
	config.Section("").Key("admin_path").SetValue("/admin")
	config.SaveTo("./conf/app.ini")

	r.Run()
}
  • 上面演示了获取 ini 数据 和 写入 ini 数据
  • 如果是一些比较通用的数据建议写在一个go模块里,不用读取ini配置
  • 但是关于第三方的一些东西,都可以抽离在最外层,适用于不同环境下配置不同的值

GIN 不同环境的部署使用不同的配置

  • 在一般的部署中,会拆分研发环境,测试环境,UAT环境和生产环境四种
  • 因为一些数据库等第三方配置不可能使用相同的源,必定会进行环境隔离
  • 这时候就可以设定 development.ini, test.ini, uat.ini, production.ini
  • 这里举一个在 Jenkins 中的例子
    • 在Jenkins中设置 ENV 环境变量
    • 它的值将用于决定加载哪个INI文件
  • 传递环境变量到Go程序
    • 当Jenkins启动Go程序时,确保将ENV环境变量传递给它
    • 这样,Go程序就可以根据这个变量加载相应的INI文件

下面是 main.go 中的读取示例

package main  

import (
    "fmt"
    "log"
    "gopkg.in/ini.v1"
    "os"
)
  
func loadConfig(env string) (*ini.File, error) {
   
    // 根据环境变量或其他机制确定INI文件路径
    filePath := fmt.Sprintf("./conf/%s.ini", env)
    cfg, err := ini.Load(filePath)
    if err != nil {
   
        return nil, err
    }
    return cfg, nil
}

func main() {
     
    // 假设环境变量 ENV 已经设置,如 ENV=development  
    env := os.Getenv("ENV")  
  
    cfg, err := loadConfig(env)  
    if err != nil {
     
        log.Fatalf("Failed to load configuration: %v", err)  
    }  
  
    // 读取配置信息  
    dbHost := cfg.Section("database").Key("host").String()  
    dbPort := cfg.Section("database").Key("port").MustInt()  
    // ... 其他配置  
  
    fmt.Printf("Database Host: %s, Port: %d\n", dbHost, dbPort)  
}
  • 这样,Jenkins 在不同环境执行部署的时候,由于不同环境下的 ENV 配置会设置到
  • 当前的系统环境中,go程序在读取到ENV的时候,会引导读取不同的配置文件
  • 由此,对各个部署环境进行区分和隔离

相关推荐

  1. 深入理解pytest.ini文件配置使用

    2024-02-22 18:48:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 18:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 18:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 18:48:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 18:48:02       91 阅读

热门阅读

  1. vue中swiper使用

    2024-02-22 18:48:02       48 阅读
  2. 在 Golang 中实现 NATS JetStream 队列

    2024-02-22 18:48:02       43 阅读
  3. 蓝桥杯-整数删除

    2024-02-22 18:48:02       47 阅读
  4. 区块链笔记(三)

    2024-02-22 18:48:02       56 阅读
  5. 基本代码讲解

    2024-02-22 18:48:02       50 阅读
  6. 梯度下降与机器学习的关系

    2024-02-22 18:48:02       50 阅读
  7. ORA-600 kclchkblk_4和2662故障---惜分飞

    2024-02-22 18:48:02       48 阅读
  8. Vista 2.08: The storm chaser

    2024-02-22 18:48:02       43 阅读
  9. Unity3D 游戏中的自动寻路有怎样的算法详解

    2024-02-22 18:48:02       60 阅读
  10. android密集架移动动画效果开发

    2024-02-22 18:48:02       46 阅读
  11. Linux中apt-get和apt命令用法汇总

    2024-02-22 18:48:02       50 阅读
  12. 【es6】es5中的类和 es6 中的类 class 有什么区别

    2024-02-22 18:48:02       45 阅读
  13. lodash库中的函数处理嵌套的对象和数组的函数

    2024-02-22 18:48:02       50 阅读
  14. 设计模式--工厂模式

    2024-02-22 18:48:02       53 阅读