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

Go protoc生成grpc.pb.go/pb.go时包名与目录不符的解决问询

解决方案

要实现在/proto目录生成fabtest.grpc.pb.go和fabtest.pb.go,且包名为fabtest,按以下步骤操作:

1. 修改fabtest.proto的go_package配置

将原配置替换为:

syntax = "proto3";
package fabtest;
option go_package = "./;fabtest";

这里的语法是option go_package = "输出路径;包名";:

  • ./ 指定生成文件的相对路径(即当前proto目录)
  • fabtest 指定生成Go文件的包名

2. 在/proto子目录执行编译命令

保持原有命令即可:

protoc -I=. --go_out=. ./fabtest.proto
protoc -I=. --go-grpc_out=. ./fabtest.proto

原理说明

  • 仅设置go_package="."时,Go插件无法正确推导包名,会生成package __的无效包声明
  • 设置go_package="./fabtest"时,插件会按照路径创建子目录并生成文件
  • 使用./;fabtest的分号语法,明确指定输出路径和包名,既让文件留在当前目录,又保证包名正确

如果习惯在项目根目录执行命令,只需调整路径参数即可,效果完全一致:

protoc -I=./proto --go_out=./proto --go-grpc_out=./proto ./proto/fabtest.proto

内容的提问来源于stack exchange,提问作者chuckd833

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:29