相关疑难解决方法(0)

protoc go_package 的正确格式?

我在 Go 中有一个现有项目,我正在使用协议缓冲区/gRPC。直到最近,该go_package选项还是可选的,并且生成的 Go 包名称将与 proto 包名称相同。

该文件位于项目根目录中。生成的代码文件 ( authenticator.pb.go) 位于同一位置。原型文件:

syntax = "proto3";

package authenticator;

service Authenticator {...}
Run Code Online (Sandbox Code Playgroud)

生成命令指定我要在同一目录中输出:

protoc --go_out=plugins=grpc:. authenticator.proto
Run Code Online (Sandbox Code Playgroud)

今天我拉取了新版本的协议缓冲区编译器和github.com/golang/protobuf/protoc-gen-go. 第一次运行时收到警告:

WARNING: Missing 'go_package' option in "authenticator.proto",
please specify it with the full Go package path as
a future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
Run Code Online (Sandbox Code Playgroud)

建议的链接或多或少没用。但是教程更明确一点:

go_package 选项定义包的导入路径,该路径将包含此文件的所有生成代码。Go 包名称将是导入路径的最后一个路径组件。例如,我们的示例将使用包名称“tutorialpb”。

option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";
Run Code Online (Sandbox Code Playgroud)

将此选项添加到 proto 文件并重新运行命令后,输出最终位于此路径中,相对于项目根目录。就像是:

$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下替代go_package名称:

  • .
  • authenticator

生成发生在正确的位置,但我得到了警告:

WARNING: …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers protoc grpc-go

22
推荐指数
6
解决办法
3万
查看次数

protoc-gen-go:无法确定“simple.proto”的 Go 导入路径

我有包含以下内容的简单原型文件。

\n
syntax="proto3";\n\npackage main;\n\nmessage Person {\n      string name = 1;\n      int32 age = 2; \n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在尝试使用 protoc 为其生成 go 代码。我跑:

\n
protoc --go_out=. simple.proto\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误:

\n
protoc-gen-go: unable to determine Go import path for "simple.proto"\n\nPlease specify either:\n        \xe2\x80\xa2 a "go_package" option in the .proto source file, or\n        \xe2\x80\xa2 a "M" argument on the command line.\n
Run Code Online (Sandbox Code Playgroud)\n

main.gogo.mod并且simple.proto位于同一文件夹中。和protocprotoc-gen-go在 PATH 环境中定义。

\n

go protocol-buffers protoc

21
推荐指数
3
解决办法
3万
查看次数

标签 统计

protoc ×2

protocol-buffers ×2

go ×1

grpc-go ×1