Go gRPC服务端缺少Unimplemented相关方法报错如何解决
错误原因
gRPC Go v1.38.0及以上版本为了实现服务向前兼容,在protoc生成的Go代码的服务接口中新增了私有校验方法mustEmbedUnimplementedXXXServer,该方法只能由pb包内置的UnimplementedXXXServer结构体实现,你自定义的Server结构体没有嵌入该结构体,因此无法匹配GreeterServer接口要求。
解决方法
有两种可选方案,按需选择即可:
- 方案1(推荐):在自定义Server结构体中嵌入pb包提供的
UnimplementedGreeterServer
修改你的Server定义为以下内容即可:
type Server struct { pb.UnimplementedGreeterServer }
该方案的优势是后续你的proto文件新增服务接口时,即使你暂时没有实现对应的方法,服务也可以正常编译运行,未实现的接口会默认返回Unimplemented错误,避免服务直接不可用。
- 方案2(严格校验模式):在自定义Server结构体中嵌入pb包提供的
UnsafeGreeterServer
修改你的Server定义为以下内容即可:
type Server struct { pb.UnsafeGreeterServer }
该方案适合需要严格校验接口完整性的场景,后续如果proto新增服务接口你没有对应实现,编译阶段就会直接报错,避免漏实现接口的问题。
注意:不要尝试自己手动实现
mustEmbedUnimplementedGreeterServer方法,该方法是pb包的私有方法,你在业务包中无法跨包实现私有方法。
内容的提问来源于stack exchange,提问作者Liamsuperman
相关产品推荐
相关产品推荐

