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

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

Load
GetStringMapStringSlice
GetStringMapString
GetStringMap
GetStringSlice
GetIntSlice
GetString
GetTime
GetFloat64
GetInt
GetBool
Get
IsExist
读取程序的所有环境变量
读取默认.env文件
All
Get
IsExist
AppEnv
Golang中通过os标准库的os.Environ()获取
Linux系统中通过启动进程时设置
容器化进程中设置
配置文件服务的接口定义
配置文件的存放方式
HadeEnv实现
Env接口定义
使用默认环境变量文件(.env)的方式
设置环境变量的方式
环境变量在容器化时代的重要性
获取环境变量
读取远端配置服务
读取本地配置文件
Heroku公司的实践标准
获取环境变量的重要性
环境变量服务和配置文件服务的设计
读取配置文件服务的接口
环境变量服务的接口及具体实现
环境变量获取配置思路分析
获取配置项的方法
思考题
小结
配置服务设计思路
配置和环境

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
经过前面几节课对框架的改造,我们能很方便在 hade 框架中创造一个定时任务,或者一个 Web 服务了。但是随着开始编写业务,你会发现,业务中有大量的配置项,比如数据库的用户名密码、缓存 Redis 的 IP 和端口、第三方调用的地址等。如何通过统一的方法快速获取到这些配置项,就是今天要讨论的内容。
当你看到获取配置项这个需求,第一个反应是不是要创建一个读取配置文件的服务。但是,一个程序获取配置项只有读取配置文件这个方法么?其实不是的,获取配置项的方法有很多,读取本地配置文件、读取远端配置服务、获取环境变量,都是获取配置项的方法。
获取远端配置服务是通过一个远程调用来获取配置信息的方法,它依赖于远端的服务提供。而读取本地配置文件和获取环境变量,是我们通过进程本身获取配置项最常用的方法,这节课就为框架增加这两种获取配置项的能力。

环境变量获取配置思路分析

在现在服务越来越容器化的时代,环境变量越来越重要。因为一个服务一旦被封装为 Docker 镜像,镜像就会被部署在不同的环境中。如何区分不同的环境呢?在容器内部已经把程序、配置文件都进行了打包,唯一能在不同环境变化的就是环境变量了。
所以顾名思义,环境变量也就是为不同环境准备的,不同环境有不同的设置。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在框架中设计配置服务的思路和方法,重点讨论了获取配置项的多种方法,包括读取本地配置文件、远程调用获取配置信息以及获取环境变量。文章强调了在容器化时代环境变量的重要性,并介绍了在Golang中通过os标准库的os.Environ()方法获取环境变量的实现方式。此外,还提到了使用默认环境变量文件来设置默认值的普遍做法,并介绍了如何在框架中设计环境变量服务的接口和具体实现。接口设计包括获取当前环境、判断环境变量是否存在、获取某个环境变量以及获取所有环境变量。具体实现则包括读取本地默认.env文件和运行环境变量,并将其保存到map中。文章还围绕获取配置这一功能点,设计了环境变量服务和配置文件服务,强调了环境变量在现代架构设计中的重要性。整体而言,本文通过实际代码和思路分析,为读者展示了如何在框架中设计和实现配置服务,为读者提供了一种快速获取配置项的方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Tokamak
    在根据文章进行编码后, 运行程序的时候发现程序会一直卡在获取锁的地方。 调试了很久才发现是因为 EnvProvider 的Boot()中调用了MustMake, 会再一次获取锁, 会导致死锁。 死锁的原因是: main.go 中的Bind() 会先获取锁, 使用的是defer 释放锁, 在Bind() 中由于会调用Boot(), EnvProvider的Boot()中也会去获取锁, 导致再次获取锁时会失败,因此会卡住. 解决方法是: 将Bind()中的锁释放改为 hade.lock.Unlock() 直接释放,尽量让锁的占用时间最小。
    2022-02-17
    3
    7
  • qinsi
    12 factor的建议是配置存储在环境变量中,甚至都不建议使用配置文件。这里似乎是需要一个配置中心:启动容器的时候从配置中心拉取配置注入到容器的环境变量中,而容器中的应用只需要读取环境变量就好了。
    2021-10-21
    5
    2
  • 牛玉富
    看来,还是用yaml的多
    2022-01-13
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部