16|配置和环境(下):配置服务中的设计思路
叶剑峰
该思维导图由 AI 生成,仅供参考
你好,我是轩脉刃。
上一节课,我们已经定义好了配置文件服务的接口,这节课就来实现这些接口。先来规划配置文件服务目录,按照上一节课分析的,多个配置文件按类别放在不同配置文件夹中,在框架文件夹中,我们将配置文件接口代码写在框架文件夹下的 contract/config.go 文件中,将具体实现放在 provider/config/ 目录中。
配置服务的设计
不过设计优于实现,动手之前我们先思考下实现这个接口要如何设计。
首先,要读取一下配置文件夹中的文件。上节课说了,最终的配置文件夹地址为,应用服务的 ConfigFolder 下的环境变量对应的文件夹,比如 ConfigFolder/development。但是还有一个问题,就是配置文件的格式的选择。
目前市面上的配置文件格式非常多,但是很难说哪种配置文件比较好,完全是不同平台、不同时代下的产物。比如 Windows 开发的配置常用 INI、Java 开发配置常用 Properties,我这里选择了使用 YAML 格式。
配置文件的读取
YAML 格式是在 Golang 的项目中比较通用的一种格式,比如 Kubernetes、Docker、Swagger 等项目,都是使用 YAML 作为其配置文件的。YAML 配置文件除了能表达基础类型比如 string、int、float 之外,也能表达复杂的数组、结构等数据类型。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何设计和实现配置服务,包括配置文件的读取、解析和替换。作者首先规划了配置文件服务目录结构,并选择了YAML格式作为配置文件的格式。详细介绍了使用Go中的yaml库来读取和解析YAML格式的配置文件,并提到了使用环境变量替换配置文件中的字段。文章还讲解了如何根据路径来解析配置项,使用递归逻辑来实现这一功能。配置服务的代码实现部分包括初始化HadeConfig的函数、读取配置文件的逻辑以及获取配置项的接口实现。此外,还讨论了如何更新App服务的配置以及如何在配置文件修改后避免重新启动应用的方法。整体而言,本文为读者提供了一套完整的配置服务设计和实现思路,涵盖了配置文件的读取、替换和解析等方面。文章还介绍了如何实现配置文件的热更新,以及在实现过程中使用的读写锁机制。配置服务在框架中是一个基础且重要的服务,能为业务代码节省不少的代码量,并提供多种设置配置的方式,满足不同的业务需求。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 友那必须是可以实现的 我现在就实现
作者回复: 哈哈,干巴叠
2021-12-101 - qinsi配置服务和app服务强耦合了,或许它们本来就是一体的?
作者回复: 并没有强耦合吧,配置服务获取app都是从容器中获取的
2021-10-231 - jack感觉这个 config 文件夹里面过于复杂了, 两层配置简单些。区分出 development / production / testing 没太大必要,每个环境不同,由 .env 文件决定就可以了2022-08-27归属地:浙江2
- 牛玉富嗯嗯,热加载要的要的。 现在正式有良好的容器、目录等设计才能有后来更复杂的ddd设计。2022-01-13
- Panmaxpassword 是通过环境变量传入的,优先级高于配置文件,我认为不应该被配置文件覆盖掉。2021-10-221
收起评论