如何配置Buf生成与Prototool一致的Go导入命名规则?
如何配置Buf生成与Prototool一致的Go导入语句
我正在尝试用Buf从Proto Schema生成Go桩代码,但生成的代码和旧工具Prototool的结果存在差异:
Prototool生成的导入语句:
import ( my_package "github.com/my-org/proto-schemas/golang/gen/my-package" )
Buf生成的导入语句:
import ( mypackage "github.com/my-org/proto-schemas/golang/gen/mypackage" )
我希望通过配置Buf实现与Prototool一致的导入结果,当前的配置文件如下,请问有没有可行的配置方法?
当前配置文件
buf.gen.yaml
version: v1 managed: enabled: false plugins: - plugin: go out: v3/golang/gen opt: paths=source_relative
buf.yaml
version: v1 breaking: use: - FILE lint: use: - DEFAULT
解决方案
差异的核心是两者默认的Go包命名规则不同:Prototool会将带短横线的目录名转换为下划线格式的包别名,而Buf默认会直接去掉短横线转为纯小写。要对齐结果,可通过以下配置调整:
- 修改
buf.gen.yaml中的Go插件参数,添加module配置并调整paths选项,让Buf按照模块路径生成导入结构:
version: v1 managed: enabled: false plugins: - plugin: go out: v3/golang/gen opt: - module=github.com/my-org/proto-schemas - paths=import
- 若你的proto文件中设置了
go_package选项,需确保其与目标路径和包别名匹配,例如在my-package目录下的proto文件中添加:
option go_package = "github.com/my-org/proto-schemas/golang/gen/my-package;my_package";
完成以上配置后,Buf生成的Go代码会使用my_package作为包别名,导入路径保持github.com/my-org/proto-schemas/golang/gen/my-package,与Prototool的输出完全一致。
内容的提问来源于stack exchange,提问作者ham_ben
相关产品推荐
相关产品推荐

