V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
lysShub
V2EX  ›  Go 编程语言

配置文件升级怎么搞?

  •  
  •   lysShub · 33 天前 · 1902 次点击
    这是一个创建于 33 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    8 条回复    2024-11-24 16:27:57 +08:00
    COW
        1
    COW  
       33 天前 via Android
    考虑弄一个文件,代码里用 if else 判断当前软件的版本,动态生成差异配置
    lysShub
        2
    lysShub  
    OP
       33 天前
    @COW 用什么动态生成?自己手搓?
    COW
        3
    COW  
       33 天前 via Android
    @lysShub 针对配置文件本身,可以用 template 语法来生成指定版本的配置文件。
    针对代码内的 config 结构体,可以引入 version 字段,根据版本使用不同配置。
    case v1:config = &ConfigV1{}
    case v2:config = &ConfigV2{}
    uds9u32br
        4
    uds9u32br  
       32 天前
    没什么问题啊,出现 break 更新之后还想要适配旧版本还能有什么办法呢,我真不知道
    kk2syc
        5
    kk2syc  
       32 天前
    如果有代码洁癖的话,就抛弃配置文件自动升级,或者单独写一个配置文件升级的转换工具。
    hellojukay
        6
    hellojukay  
       32 天前 via Android
    参考 nginx 怎么升级配置文件的
    EscYezi
        7
    EscYezi  
       32 天前 via iPad
    看起来像是 json 配置文件映射到 go 结构体,如果能把配置平铺做兼容可能就简单了。
    比如现在配置文件是{“a”:{“b”:{“c”:12345}}},换成 a.b.c=12345
    或者还是 json 配置文件,但是用 jsonpath 来解析。
    panlatent
        8
    panlatent  
       32 天前 via Android
    我的经验是不做复杂对象, 适当保留无效字段或者通过解析层处理掉无效数据。 我推荐前者,前一个大版本失效字段标记废弃,超两个大版本直接删除。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:05 · PVG 21:05 · LAX 05:05 · JFK 08:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.