未定义:编译grpc时的grpc.ClientConnInterface

use*_*084 3 go protocol-buffers grpc grpc-go

我是 grpc 的新手。在我的go.mod文件中,我有:

google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8
google.golang.org/grpc v1.21.1
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
github.com/golang/protobuf v1.3.2
Run Code Online (Sandbox Code Playgroud)

我正在像这样生成我的 protobuf:

go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
protoc --go_out=. --go-grpc_out=. ./me.proto
Run Code Online (Sandbox Code Playgroud)

当我尝试运行测试和构建时出现以下错误:

me_grpc.pb.go:15:11: undefined: grpc.SupportPackageIsVersion7
me_grpc.pb.go:25:5: undefined: grpc.ClientConnInterface
me_grpc.pb.go:28:30: undefined: grpc.ClientConnInterface
me_grpc.pb.go:65:34: undefined: grpc.ServiceRegistrar
Run Code Online (Sandbox Code Playgroud)

我发现切换SupportPackageIsVersion7SupportPackageIsVersion5让 gopls 高兴,但我不知道我需要做什么才能使其他错误消失。不幸的是,由于我的 repo 中的其他内容无法编译,如果我尝试升级这些库,我会被困在 go.mod 文件中的库版本。

ttr*_*asn 8

很高兴您启动了 GRPC。

好像protoc-gen-go你老了,需要更新,

要更新它,你应该

  • 首先,删除当前文件,要查找它存储的位置,可以使用echo $PATH 命令查找此文件的位置。然后将其删除。

  • 其次,安装新的,安装它你可以运行这个命令。

    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc

    注意如果您有任何问题,请改用此命令,

    go get -u github.com/golang/protobuf/protoc-gen-go

更新后,您必须编辑您的go.mod文件。

改变这一行:

google.golang.org/grpc v1.21.1
Run Code Online (Sandbox Code Playgroud)

google.golang.org/grpc v1.33.2

Run Code Online (Sandbox Code Playgroud)

此版本 ( 1.33.2) 支持SupportPackageIsVersion7,您的问题将得到解决。

注: SupportPackageIsVersion7支持后1.32.0版本。他们支持旧版本go version >= 1.12

  • @user_78361084 此更新与旧版本没有任何冲突。您的旧版本是`1.21.1`,支持`SupportPackageIsVersion5`,版本`1.33.2`也支持`SupportPackageIsVersion from 3 to 7`。所以您可以自由使用新版本 (2认同)