grpc实战-pb文件生成问题/空消息体问题

报错信息:

proto: message pb.Empty is already registered
See https://protobuf.dev/reference/go/faq#namespace-conflict

对比老版本的工具生成的xxxx.pb.go文件。import导入的proto链接不一样:
旧版本:import github.com/golang/protobuf
新版本:import google.golang.org/protobuf (更新后的API的主要特点是支持反射,并将面向用户的API与底层实现分开。)
(官方推荐新版本:We recommend that you use google.golang.org/protobuf in new code.)

***问题所在:新版本自己带有empty消息体:google/protobuf/empty.proto

所以我定义的Empty重复了,应该把它删除掉:
message Empty {

}

然后在我们的proto文件中,这样传参:
import “google/protobuf/empty.proto”;

service SomeService {
rpc SomeOperation (google.protobuf.Empty) returns (google.protobuf.Empty) {}
}

实现方法,传递的参数类型是*empty.Empty:
import “github.com/golang/protobuf/ptypes/empty”

func (s *Server) SomeOperation(ctx context.Context, req *empty.Empty) (*empty.Empty, error) {
resp := dosomething()
return resp.(*empty.Empty), nil
}

参考链接:
https://gist.github.com/subfuzion/ecfc45c4e8dfb28e31fb5a8bf2f8282c
https://pkg.go.dev/google.golang.org/protobuf/types/known/emptypb#Empty
其实上面的链接也是根据它一开始报错给的链接上分享的: https://protobuf.dev/reference/go/faq#namespace-conflict

你可能感兴趣的:(rpc,go)