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

关于 INI 配置文件与go-ini


1 )概述

  • 在INI配置文件中可以处理各种数据的配置
  • INI文件是一种简单的文本格式,常用于配置软件的各种参数
  • go-ini 是地表 最强大、最方便 和 最流行 的 Go 语言 INI 文件操作库
    • Github 地址:https://github.com/go-ini/ini
    • 官方文档: https://ini.unknwon.io/
    • 使用示例直达: https://ini.unknwon.io/docs/intro/getting_started

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 mainimport ("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的时候,会引导读取不同的配置文件
  • 由此,对各个部署环境进行区分和隔离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安卓基础1】初识Android

🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职 🏆本文收录于 安卓学习大全,欢迎关注 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频链接 &…

Git笔记——2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、撤销修改__情况一 二、撤销修改__情况二 三、撤销修改__情况三 四、删除文件 五、理解分支 六、创建、切换和合并分支初体验 七、删除分支 八、合并冲突 总…

代码随想录算法训练营Day 27|LeetCode39 组合总和、Leetcode40 组合总和 II、Leetcode131 分割回文串

LeetCode39 组合总和 题目链接&#xff1a;组合总和 思路 本题没有组合数量要求&#xff0c;仅仅是总和的限制&#xff0c;所以递归没有层数的限制&#xff0c;只要选取的元素总和超过target&#xff0c;就返回。 代码 class Solution { private:vector<vector<int>…

idea maven创建kotlin项目

第一步&#xff1a;打开idea 第二步&#xff1a;添加依赖 <repositories><repository><id>mavenCentral</id><url>https://repo1.maven.org/maven2/</url></repository></repositories><build><sourceDirectory>…

ElasticSearch DSL查询、排序 、分页的原理及语法

1. DSL查询分类和基本语法 ElasticSearch提供了基于Json的DSL来定义查询&#xff0c;常见的查询类型包括&#xff1a; • 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用&#xff0c;一般不是查出所有&#xff0c;一次性查询20条。例如 match_all • 全文检索(ful…

【webrtc】m77 PacedSender

mediasoup是m77的代码,m77的代码并没有paced controller ,而且与paced sender 的逻辑混在了一起。结合大神们的代码分析,对照m77 进行 理解。m77 有ProbeController。给pacersender 更新飞行数据:PacedSender::InsertPacket(size_t bytes) 对应的是 PacingController::OnPa…

虹科技术丨PTP时钟源设备全攻略:从普通时钟到透明时钟的进阶之路

来源&#xff1a;虹科工业智能互联 虹科技术丨PTP时钟源设备全攻略&#xff1a;从普通时钟到透明时钟的进阶之路 原文链接&#xff1a;https://mp.weixin.qq.com/s/ArBtuLpU6mXax4QWmZDKfQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #PTP #普通时钟 #透明时钟 …

http缓存?强制缓存和协商缓存?

HTTP缓存是一种优化网络资源加载速度的技术&#xff0c;通过减少从服务器获取相同资源的次数来实现。HTTP缓存机制包括强制缓存和协商缓存&#xff08;对比缓存&#xff09;两种类型。 强制缓存 强制缓存是指浏览器在接收到服务器返回的响应后&#xff0c;会将响应内容和相关…

区块链笔记(五)---德勤相关分析报告

web3.0 定义&#xff1a; 在《Insights into a Modern World》提出&#xff0c;“信息将由用户自己发布、保管、不可追溯且永远不会泄露&#xff0c;用户的任何行为将不需要任何中间机构来帮助传递”&#xff1b;用来指代一种区块链技术&#xff0c;可以基于“无须信任的交互…

解决用户留存难!复购低! 作为企业家的你可以看看!

工会排队模式详解 在互联网营销的大潮中&#xff0c;各种促销模式层出不穷&#xff0c;但真正能够吸引消费者并实现双赢的却寥寥无几。工的会排队模式便是在这一背景下应运而生&#xff0c;它巧妙地结合了工会积分、奖金池和排队机制&#xff0c;为消费者和商家带来了全新的体…

助力探索社交出海最短变现路径,融云 1V1 音视频「限时免费」

在社交赛道&#xff0c;1V1 业务是最好的切入点。 对于初创公司来说&#xff0c;1V1 业务的技术成本和运营成本相对可控&#xff0c;并且具备与秀场直播等业务融合拓展的巨大空间。未来&#xff0c;相信 1V1 业务会吸引更多开发者投身其中。 一位社交出海经验丰富的从业者曾在…

PHP+vue+mysql校园论坛bbs系统w076f-

本文尝试以B/S架构设计模式中的vue框架&#xff0c;php语言为基础&#xff0c;通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法&#xff0c;旨在完成一个快速、高效、便捷的BBS论坛系统。本系统以用户与管理员两类人&#xff0c;作为…

【力扣 - 二叉树的直径】

题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 提示&#xff1a; 树中节点数目在范围 [1, 10000] 内…

【最新Dubbo3深入理解】Dubbo3核心Tripple协议详解

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

区块链游戏解说:什么是 Planet IX

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Planet IX Dashboard 什么是 Planet IX Planet IX&#xff0c;一个由原生 IX TOKEN 推动的 Web3 玩赚平台。作为一款 GameFi 策略游戏&#xff0c; Planet IX 上的每项资…

Pytorch-SGD算法解析

关注B站可以观看更多实战教学视频&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) SGD&#xff0c;即随机梯度下降&#xff08;Stochastic Gradient Descent&#xff09;&#xff0c;是机器学习中用于优化目标函数的迭代方法&#xff0c;特别是在处…

C语言字符串函数strchr与strrchr

注意&#xff1a; 这两个函数的功能&#xff0c;都是在指定的字符串 s 中&#xff0c;试图找到字符 c。strchr() 从左往右找&#xff0c;strrchr() 从右往左找。字符串结束标记 ‘\0’ 被认为是字符串的一部分。 示例 char *p;p strchr("www.qq.com", .); // 从左…

python自动化接口测试

前几天&#xff0c;同组姐妹说想要对接口那些异常值进行测试&#xff0c;能否有自动化测试的方法。仔细想了一下&#xff0c;工具还挺多&#xff0c;大概分析了一下&#xff1a; 1、soapui:可以对接口参数进行异常值参数化&#xff0c;可以加断言&#xff0c;一般我们会加http…

如何申请试用Gemini 1.5 Pro

https://developers.googleblog.com/2024/02/gemini-15-available-for-private-preview-in-google-ai-studio.html 我开发的chatgpt网站&#xff1a; https://chat.xutongbao.top

设计模式的分类及Spring中用到的设计模式

设计模式的分类 在《设计模式&#xff1a;可复用面向对象软件的基础》&#xff08;Design Patterns: Elements of Reusable Object-Oriented Software&#xff09;一书中&#xff0c;提出了 23 种设计模式&#xff0c;通常称为 GoF&#xff08;Gang of Four&#xff09;设计模…