go语言多箱环境配置

Go语言多箱环境配置

前言

在日常的开发过程中, 我们必然要使用多套环境来运行我们的代码, 比如dev, test, uat, prod等, 每个环境在软件开发周期的不同阶段承载着不同责任.

那么, 在我们的Go语言项目中, 我们项目中如何去实现各个环境的快速切换(即多箱环境的配置)?

 引入Viper

Viper是一个为Go应用程序提供的全面配置解决方案,适用于各种配置需求和格式。支持主流的配置文件比如json, yaml, property等文件格式.具体可以参考这里: https://github.com/spf13/viper

定义配置文件和加载配置信息

  // 加载配置文件
  path, err := os.Getwd()
  v := viper.New()
  v.SetConfigType("yml")
  v.AddConfigPath(path + "/resource/")

然后根据运行环境变量中的env变量,确定去读取对应的yml文件的内容, 比如env = dev, 则读取app-dev.yml,

switch env {
  case "local":
    // 本地开发环境
    v.SetConfigName(localPath)
  case "dev":
    // 读取dev环境
    v.SetConfigName(devPath)
    ...
 }

然后读取配置以及Unmarshall内容,

err := v.ReadInConfig() //加载config内容
var c Config = Config{}
v.Unmarshal(&c)

这样c对象就可以完全解析出来了,

注意yaml文件里面对应的字段要和Config的字段一一对应才能正确解析, 推的config定义以及yaml的定义参考如下:

type Config struct {
  MongoConf    MongoConnQuota
  ....
}

type MongoConnQuota struct {
  // 连接信息
  Uri            string
  AuthSource     string
  Username       string
  Password       string
  MaxPoolSize    uint64
  MinPoolSize    uint64
}

对应的yaml配置文件的内容:

Mongo:
  Uri: xxx:xxx(port)
  AuthSource: xxxx
  Username: xxxx
  Password: xxxx
  MaxPoolSize: 100
  MinPoolSize: 5

这样就整体实现了,通过viper箱环境的配置了.

最后的补充

Go语言里面如何env如何配置, 其实go的SDK里面已经提供了flag这个工具用来解析运行命令行的参数. flag包见 https://pkg.go.dev/flag

项目代码里面的env参数解析如下:

env := "local"
// flag 命令获取运行参数中的env
flag.StringVar(&env, "env", env, "根据不同的环境加载不同配置文件(dev开发, test 测试, pro 生产)")
flag.Parse()
收录于合集 #golang开发
 14
上一篇Go 语言踩坑之类型推断(:=)
阅读 149
低配全栈
 
 
关注公众号后可以给作者发消息
 
 
 
 
 
posted @   技术颜良  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2021-12-07 高可用集群corosync+pacemaker之crmsh使用
2021-12-07 Corosync+Pacemaker+DRBD+Mysql高可用HA配置
2021-12-07 nfs+DRBD+corosync+pacemaker 实现高可用(ha)的nfs集群
2021-12-07 分布式块设备DRBD部署
2021-12-07 nginx匹配
2020-12-07 ansible Unarchive
2018-12-07 kubectl命令自动补全
点击右上角即可分享
微信分享提示