英文:
How am I supposed to use protoc-gen-go-grpc?
问题
我正在尝试为一些协议缓冲区生成Go代码以及一个gRPC服务。
过去我使用过 https://github.com/golang/protobuf
,生成命令看起来像这样:
//go:generate protoc --proto_path=. --go-out=. --go_opt=paths=source_relative <file>.proto
//go:generate protoc --proto_path=. --go_grpc_out=. --go_grpc_opt=paths=source_relative <file>.proto
这种方法效果很好,但是该存储库已被 google.golang.org/protobuf
和 google.golang.org/grpc
取代。
根据我所了解,这是一个有意的分离,以分开协议缓冲区和gRPC项目的发布周期。
使用新的存储库,我像这样安装了工具:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
两个工具都已安装,并且在路径上可见。我遇到的问题是 protoc
或 protoc-gen-go
正在寻找旧的工具 - protoc-gen-go_grpc
。请注意下划线。
我已经阅读了所有我能找到的文档和Github问题,但还没有弄清楚我应该如何使用新的 protoc-gen-go-grpc
。请注意破折号。
$ echo $GOPATH
/Users/<username>/dev/go
$ echo $GOBIN
/Users/<username>/dev/go/bin
$ which protoc
/opt/homebrew/bin/protoc
$ which protoc-gen-go
/Users/<username>/dev/go/bin/protoc-gen-go
$ which protoc-gen-go_grpc
protoc-gen-go_grpc not found
$ which protoc-gen-go-grpc
/Users/<username>/dev/go/bin/protoc-gen-go-grpc
英文:
I am trying to generate Go code for some Protocol Buffers as well as a gRPC service.
In the past I have used https://github.com/golang/protobuf
with a generate command that looked something like this:
//go:generate protoc --proto_path=. --go-out=. --go_opt=paths=source_relative <file>.proto
//go:generate protoc --proto_path=. --go_grpc_out=. --go_grpc_opt=paths=source_relative <file>.proto
This method worked just fine, but the repo has since been superceded by google.golang.org/protobuf
and google.golang.org/grpc
.
From what I've read, this was an intentional split to separate the protobuf and gRPC project release cycles.
Using the new repositories, I installed the tools like this:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
Both tools are installed, and are visible on the path. The problem that I'm encountering is that protoc
or protoc-gen-go
is looking for the older tool - protoc-gen-go_grpc
. Note the underscore.
I have been reading all the documentation and Github issues that I can find, and haven't yet been able to figure out how I am meant to use the new protoc-gen-go-grpc
. Note the dash.
$ echo $GOPATH
/Users/<username>/dev/go
$ echo $GOBIN
/Users/<username>/dev/go/bin
$ which protoc
/opt/homebrew/bin/protoc
$ which protoc-gen-go
/Users/<username>/dev/go/bin/protoc-gen-go
$ which protoc-gen-go_grpc
protoc-gen-go_grpc not found
$ which protoc-gen-go-grpc
/Users/<username>/dev/go/bin/protoc-gen-go-grpc
答案1
得分: 8
我的问题非常简单,但是找起来真是让人烦恼。
当运行 protoc
时,使用 --go_grpc_out
标志会寻找 protoc-gen-go_grpc
。
当运行 protoc
时,使用 --go-grpc_out
标志会寻找 protoc-gen-go-grpc
。
看起来,protoc
没有定义明确的、有文档支持的标志,并且在提供了错误的标志时不会报错,而是使用这些标志来确定使用哪个插件。如果你拼写错误了标志,它会寻找错误的插件。
英文:
My issue was so simple to fix, but darn annoying to find.
When running protoc
, using the --go_grpc_out
flag looks for protoc-gen-go_grpc
.
When running protoc
, using --go-grpc_out
flag looks for protoc-gen-go-grpc
.
It seems that instead of protoc
having well defined, documented flags, and erroring when an incorrect flag is provided they're using the flags to determine which plugin to use. If you misspell the flag, it looks for the wrong plugin.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论