如何避免.textproto文件中重复出现相同的代码块?
原生textproto语法本身不支持变量声明与复用,你可以根据项目场景选择以下成熟方案消除重复:
方案1:复用proto字段默认值(无额外工具依赖)
如果你有权限修改对应efg块的.proto定义,可以直接把orange的默认值设为true、purple的默认值设为false,之后textproto里直接写空的efg块即可:
abc { efg {} } xyz { efg {} } mnt { efg {} }
如果当前proto的默认值已经符合要求,不用改proto直接用空块就行,是成本最低的方案。
方案2:用模板工具生成最终textproto
如果不能修改proto定义,可以用模板引擎提前渲染生成完整的textproto文件,常用的实现方式:
- 用
jinja2(Python生态):先定义公共块变量再重复引用,模板示例如下:
{% set default_efg = '''efg { orange: true purple: false }''' %} abc { {{ default_efg }} } xyz { {{ default_efg }} } mnt { {{ default_efg }} }
只需要写几行简单的Python脚本即可完成渲染,适合已有Python构建流程的项目。
- 用项目已有的构建工具自带的模板功能:比如bazel、gn等构建工具都内置了变量替换能力,不用额外引入新依赖。
方案3:配置读取层支持公共块导入
如果你自己控制textproto的读取逻辑,可以给解析逻辑加公共块导入能力:把重复的efg块单独存为default_efg.textproto,在主配置里加自定义的导入标记,解析时自动把公共块合并进去即可。
方案4:代码层默认值兜底
如果以上方案都不适用,可以直接在读取配置的代码里加逻辑:如果efg块没有显式设置orange、purple的值,自动填充你需要的默认值,对配置编写侧完全透明,只需要修改一次读取逻辑。
内容的提问来源于stack exchange,提问作者candy
相关产品推荐
相关产品推荐

