我应该如何使用 protoc-gen-go-grpc?
How am I supposed to use protoc-gen-go-grpc?
我正在尝试为一些协议缓冲区和 gRPC 服务生成 Go 代码。
过去我使用 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
取代。
据我所知,这是有意分开的,目的是将 protobuf 和 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 found this transition by the Google team insufficiently documented and problematic too.
我不知道可以使用 Go 的代码生成来编译原型 (//go:generate protoc
)。
您是否在命令行上尝试过 运行 protoc
(的最新版本)?如果没有别的,也许这会产生额外的调试。
在我使用的机器上,go install
将二进制文件放在 ${HOME}/go/bin
中,但 GOBIN
未设置 并且目录是不在我的 ${PATH}
中。我怀疑 (!?) 如果我尝试 protoc
,我也会遇到问题。
您的 PATH
中是否有 GOBIN
或底层目录?
如果一切都失败了,你有没有在你的机器上删除出现的protoc-gen-go*
并重新go install
?
我的问题很容易解决,但很难找到。
当 运行 protoc
时,使用 --go_grpc_out
标志查找 protoc-gen-go_grpc
.
当 运行 protoc
时,使用 --go-grpc_out
标志查找 protoc-gen-go-grpc
.
似乎 protoc
没有定义明确、记录在案的标志,并且在提供不正确的标志时出错,他们正在使用标志来确定要使用的插件。如果您拼错了标志,它会查找错误的插件。
我正在尝试为一些协议缓冲区和 gRPC 服务生成 Go 代码。
过去我使用 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
取代。
据我所知,这是有意分开的,目的是将 protobuf 和 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 found this transition by the Google team insufficiently documented and problematic too.
我不知道可以使用 Go 的代码生成来编译原型 (//go:generate protoc
)。
您是否在命令行上尝试过 运行 protoc
(的最新版本)?如果没有别的,也许这会产生额外的调试。
在我使用的机器上,go install
将二进制文件放在 ${HOME}/go/bin
中,但 GOBIN
未设置 并且目录是不在我的 ${PATH}
中。我怀疑 (!?) 如果我尝试 protoc
,我也会遇到问题。
您的 PATH
中是否有 GOBIN
或底层目录?
如果一切都失败了,你有没有在你的机器上删除出现的protoc-gen-go*
并重新go install
?
我的问题很容易解决,但很难找到。
当 运行 protoc
时,使用 --go_grpc_out
标志查找 protoc-gen-go_grpc
.
当 运行 protoc
时,使用 --go-grpc_out
标志查找 protoc-gen-go-grpc
.
似乎 protoc
没有定义明确、记录在案的标志,并且在提供不正确的标志时出错,他们正在使用标志来确定要使用的插件。如果您拼错了标志,它会查找错误的插件。