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

这篇具有很好参考价值的文章主要介绍了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 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 中的读取示例文章来源地址https://www.toymoban.com/news/detail-836306.html

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

到了这里,关于Gin框架: 使用go-ini配置参数与不同环境下的配置部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Go Web开发】Web初识、RESTful架构和RESTful API详解、Gin框架的安装和简单使用

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 全称: “万维网”(World Wide Web) 本质: 系统(基于互联网).

    2024年02月03日
    浏览(53)
  • Go(四)gin框架

    1.1、下载和安装gin 下载包:go get github.com/gin-gonic/gin 使用go mod管理包: 1)初始化 Go Modules :go mod init your_module_name,这将创建一个 go.mod 文件,记录你的项目的模块信息和当前依赖关系; 2)复制依赖包到vendor目录 :\\\"go mod vendor\\\" 会将项目的所有包复制到vendor目录中。这包括

    2024年01月25日
    浏览(40)
  • go gin 参数绑定常用验证器

    https://pkg.go.dev/github.com/go-playground/validator/v10#readme-baked-in-validations min 最小 max 最大 len 长度限制 gt 大于 eq 等于 ne 不等于 eqfield 与某个字段值一样 nefield 与某个字段值不一样 oneof 枚举 ,以空格分开 startswith endswith dive 数组

    2024年02月11日
    浏览(39)
  • Go-Gin框架

    Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter,速度提高了近 40 倍。 点击此处访问Gin官方中文文档。 新建文件main.go,内容如下: 运行后访问: http://localhost:8000/ Gin支持加载HTML模板, 然后根据模板参数进行配置并返回相应的数

    2024年02月20日
    浏览(42)
  • Go的gin参数校验之validator库

    使用 validator 以后,只需要在定义结构体时使用 binding 或 validate tag标识相关校验规则,就可以进行参数校验了,而不用自己单独去写常见的校验规则。 常用约束如下: 字符串约束 excludesall:不包含参数中任意的 UNICODE 字符,例如excludesall=ab; excludesrune:不包含参数表示的

    2024年02月12日
    浏览(40)
  • GO学习之 微框架(Gin)

    1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Http) 11、GO学习之 微框架(Gin) 12、GO学习

    2024年02月13日
    浏览(41)
  • Go语言web框架——Gin

    Gin是一个go语言写的Web框架 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求 Request GET /url ,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答Response,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理

    2023年04月14日
    浏览(81)
  • 【go】GIN参数重复绑定报错EOF问题

    在 Gin 框架中,当多次调用 ShouldBind() 或 ShouldBindJSON() 方法时,会导致请求体的数据流被读取多次,从而出现 “EOF” 错误。 例如在api层绑定了参数,又自定义了读取参数或绑定参数的中间件,会造成重复调用。 [ERROR] 2023/08/07 14:36:48 {“user_id”:“975674f531784289bfba3ee011ec0af0”,“

    2024年02月14日
    浏览(43)
  • 解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题

    🍊gin框架github地址:https://github.com/gin-gonic/gin         按照官方文档安装gin,但是尝试了好几次,包括使用国内网络或者使用梯子,都超时失败了,爆了如下超时错误 🍊 解决方法如下 1、先查看go相关的配置 如上显示GOPROXY配置是https://proxy.golang.org,这个地址已经被墙了,

    2024年02月11日
    浏览(58)
  • Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    使用gin框架的BindJSON方法,将前端的json格式数据将后端的结构体相绑定,从而获取到前端所发送的数据,并返回给前端 1.将前端发送过来的数据全部返回 2.将前端发送过来的json格式数据选择性返回   使用gin框架的PostForm方法,从而获取到前端form格式的参数 使用gin框架中的

    2024年02月01日
    浏览(115)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包