revel v0.21.0 在2018年10月30日正式发布,官方更新日志里把session engine支持和http mux集成列为核心新增特性。之前用框架默认session引擎的项目,从这个版本开始就可以自定义自己的session engine了;revel同时也支持对接其他自带独立http mux的go包。对于想要替换会话存储方式、或是把已有http组件组合进项目的应用来说,这两个接口大幅拓展了框架的集成能力,但这不代表原有代码什么都不用改就能直接升级。

来源:Revel 官方版本记录
这次升级有个接口变化必须优先排查:controller.Session 的类型从 map[string]string 改成了 map[string]interface{}。官方提交记录明确把这个改动标记为破坏性变更,说明是为了适配新增的 Session Engine 和 session cookie engine 能力。类型从纯字符串映射拓展为支持任意接口值之后,应用可以往Session里存更多类型的数据,但读取数据的时候也要格外注意类型断言、序列化兼容,还要留意老代码的编译报错。升级前先把项目内所有读写controller.Session的地方全检索一遍,比只改依赖版本号重要得多。
![Revel 官方提交记录标出 Session Engine 支持及 controller.Session 从 map[string]string 改为 map[string]interface{} 的破坏性变更](https://img.php.cn/upload/image/332/915/455/1792134696221568.png)
来源:Revel 官方提交记录
HTTP mux 支持的作用主要是组件组合:如果其他Go包自带独立的HTTP mux,你可以直接把它接入Revel项目,不用强制把所有请求入口都改成Revel的同一种路由实现。具体怎么接入还是要看应用自身的结构和依赖模块,官方只是确认了存在这个支持,并没有承诺所有第三方mux都能无差别兼容,也没有放出完整的性能对比数据。
这次版本更新还涉及可复用Controller的配置项新增,以及一批旧接口的清理。老项目升级的时候,一定要对照发行页里的破坏性变更清单,检查已经弃用的logger、生命周期回调名称、还有调整过位置的栈实现,跑完所有现有测试。其中Session值类型的变化影响范围很广,很容易干扰自定义序列化逻辑和模板数据传递;哪怕你的项目之前只往Session里存字符串,代码也可能因为静态类型签名不匹配需要调整。把版本记录里的所有变动点逐个对应到项目里的调用位置,比只观察服务能不能正常启动,能早很多发现兼容问题。
v0.21.0是历史旧版本,所有相关信息都来自Revel官方发行页和提交记录。你自己的项目当前是否还在使用这些接口,要对照实际用到的依赖分支核验,这些历史版本页面不代表项目现在的兼容支持政策,也没有覆盖全部迁移路径。不管是新项目还是长期维护的老项目,都建议以当前正在用的正式发行版本和对应官方文档作为决策参考。


















