配置文件升级怎么搞?

5 天前
 lysShub

在站内找到个相同帖子 https://www.v2ex.com/t/890739

问题是应该怎么升级呢?难道每个版本都实现一个类似 func Update(cfg ConfigV2)(ConfigV3, error) 的玩意? 这样岂不是每个 ConfigVx 的 struct 都得保留一份?

这种需求有没有现成的方案?

1436 次点击
所在节点    Go 编程语言
8 条回复
COW
5 天前
考虑弄一个文件,代码里用 if else 判断当前软件的版本,动态生成差异配置
lysShub
5 天前
@COW 用什么动态生成?自己手搓?
COW
5 天前
@lysShub 针对配置文件本身,可以用 template 语法来生成指定版本的配置文件。
针对代码内的 config 结构体,可以引入 version 字段,根据版本使用不同配置。
case v1:config = &ConfigV1{}
case v2:config = &ConfigV2{}
uds9u32br
5 天前
没什么问题啊,出现 break 更新之后还想要适配旧版本还能有什么办法呢,我真不知道
kk2syc
4 天前
如果有代码洁癖的话,就抛弃配置文件自动升级,或者单独写一个配置文件升级的转换工具。
hellojukay
4 天前
参考 nginx 怎么升级配置文件的
EscYezi
4 天前
看起来像是 json 配置文件映射到 go 结构体,如果能把配置平铺做兼容可能就简单了。
比如现在配置文件是{“a”:{“b”:{“c”:12345}}},换成 a.b.c=12345
或者还是 json 配置文件,但是用 jsonpath 来解析。
panlatent
4 天前
我的经验是不做复杂对象, 适当保留无效字段或者通过解析层处理掉无效数据。 我推荐前者,前一个大版本失效字段标记废弃,超两个大版本直接删除。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1092059

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX