文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go 多环境下配置管理方案(多种方案)

2024-04-02 19:55

关注

需求

开发过程中开发者经常面对的一个需求就是:一个项目可能会在不同的环境下运行,本地开发环境、测试环境、灰度环境、生产环境。每个环境的参数和配置可能都会不相同,如服务器配置、数据库连接。为避免各环境产生数据混乱,让程序执行时在不同的环境中调用正确的配置,可以这样设计:

命令唤醒程序--->识别环境--->根据环境读取对应配置文件

方案1:配置文件管理

根据环境创建配置文件,多个环境多个配置文件。如开发环境 config-dev.yaml,测试环境 config-test.yaml,预发环境 config-pre.yaml,生产环境 config-prod.yaml。

在代码层面上控制想要使用的配置文件,然后使用第三方包 Flag 或者 viper 读取配置文件。该方式不够自动化,如果每次都需要修改代码,上线后如果忘记修改了就容易造成问题。

func main(){
    configFile := './config/config-dev.yaml' // './config/confg-test.yaml'
    
    //使用 viper
	v := viper.New()
	v.SetConfigFile(configFile)
	v.SetConfigType("yaml")
	if err := v.ReadInConfig(); err != nil {
		panic(fmt.Errorf("read config failed: %s \n", err))
	}    
}

进一步优化,通过配置环境变量,然后通过环境变量来区分配置文件。首先在电脑上配置环境变量:

vim .bash_profile
export GO_ENV= true
source .bash_profile 

在代码层面上就可以通过环境配置来区分配置文件

func main(){
 	configEnv := os.Getenv("GO_ENV");
	switch configEnv {
	case "dev":
		configPath = "./config-dev.yaml"
	case "test":
		configPath = "./config-test.yaml"
	case "prod":
		configPath = "./config-prod.yaml"
	}
}

通过设置环境变量读取配置文件,这种方式使用方便,现在很多开发者都会这样使用,但是当服务在集群环境上可能会有很多问题。

统一管理配置文件,所有服务都只针对一份配置文件,可以保证唯一性;配置环境也需要权限隔离,部分开发者拥有生产配置权限。

方案2:集中式管理配置

通过使用 Redis 统一管理,在比较大规模的微服务体系中可以引入配置中心。集中式管理的优势:

方式1:如果使用 Redis ,可以使用工具包 github.com/gogap/env_json

func main() {
	data, _ := ioutil.ReadFile("./db.conf")

	dbConf := DBConfig{}
	if err := env_json.Unmarshal(data, &dbConf); err != nil {
		fmt.Print(err)
		return
	}
	fmt.Println(dbConf)
}

方式2:如果使用配置中心服务,可以使用 Nacos、Apollo等 。后续继续学习更新这部分知识

到此这篇关于Go 多环境下配置管理方案的文章就介绍到这了,更多相关go多环境配置管理方案内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯