手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

16|配置和环境(下):配置服务中的设计思路

go-yaml库的使用
YAML格式
读写锁的使用
使用fsnotify库进行文件夹监控
使用函数递归逻辑
根据path来解析某个配置项
设计占位符为"env(XXXX)"
使用环境变量替换配置文件中的字段
配置文件的格式选择
实现命令行工具获取配置路径对应的配置
配置服务的灵活性和实用性
提供多种设置配置的方式
配置服务的重要性
配置文件热更新的测试
环境变量注入配置文件的功能
配置文件热更新
加载配置文件时更新App服务的操作
HadeConfig的属性和初始化函数
配置项的解析
配置文件的替换
读取配置文件夹中的文件
思考题
小结
验证
配置服务的代码实现
配置服务的设计
配置和环境(下):配置服务中的设计思路

该思维导图由 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
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 那必须是可以实现的 我现在就实现

    作者回复: 哈哈,干巴叠

    2021-12-10
    1
  • qinsi
    配置服务和app服务强耦合了,或许它们本来就是一体的?

    作者回复: 并没有强耦合吧,配置服务获取app都是从容器中获取的

    2021-10-23
    1
  • jack
    感觉这个 config 文件夹里面过于复杂了, 两层配置简单些。区分出 development / production / testing 没太大必要,每个环境不同,由 .env 文件决定就可以了
    2022-08-27归属地:浙江
    2
  • 牛玉富
    嗯嗯,热加载要的要的。 现在正式有良好的容器、目录等设计才能有后来更复杂的ddd设计。
    2022-01-13
  • Panmax
    password 是通过环境变量传入的,优先级高于配置文件,我认为不应该被配置文件覆盖掉。
    2021-10-22
    1
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部