You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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默认会直接去掉短横线转为纯小写。要对齐结果,可通过以下配置调整:

  1. 修改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
  1. 若你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:42:10