当前位置:网站首页>Protobuf Grpc使用异常 类型有未导出的方法,并且是在不同的软件包中定义
Protobuf Grpc使用异常 类型有未导出的方法,并且是在不同的软件包中定义
2022-08-03 18:55:00 【chutianxia】
Grpc使用异常
类型有未导出的方法,并且是在不同的软件包中定义
导致原因:
导出的pb.go 文件中 GretterServer interface中有私有变量导致的。
// GreeterServer is the server API for Greeter service. // All implementations must embed UnimplementedGreeterServer // for forward compatibility type GreeterServer interface { SayHello(context.Context, *HelloRequest) (*HelloReply, error) mustEmbedUnimplementedGreeterServer() }proto文件内容:
syntax = "proto3"; package helloworld; option go_package = "./helloworld"; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) { } } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }异常提示:
无法将 ‘&GreeterServer{}’ (类型 *GreeterServer) 用作类型 GreeterServer 类型无法实现 ‘GreeterServer’,因为类型有未导出的方法,并且是在不同的软件包中定义

运行异常:
.\server.go:33:35: cannot use &GreeterServer{} (value of type *GreeterServer) as type helloworld.GreeterServer in argument to pb.RegisterGreeterServer:
*GreeterServer does not implement helloworld.GreeterServer (missing mustEmbedUnimplementedGreeterServer method)
protobuf 和 grpc 版本:
google.golang.org/grpc v1.48.0
google.golang.org/protobuf v1.28.0修复方式: 增加第15行代码内容:*pb.UnimplementedXxxxxServer Xxxxx为proto文件中定义的service名称
package main import ( pb "GoRpc/proto/helloworld" "context" "flag" "google.golang.org/grpc" "net" ) var port string type GreeterServer struct { // 增加此行代码 *pb.UnimplementedGreeterServer } func init() { flag.StringVar(&port, "p", "8001", "port to connect to") flag.Parse() } func (s *GreeterServer) SayHello(ctx context.Context, r *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{ Message: "Hello.world"}, nil } func main() { server := grpc.NewServer() pb.RegisterGreeterServer(server, &GreeterServer{ }) lis, _ := net.Listen("tcp", ":"+port) server.Serve(lis) }修复问题的原因,查看helloworld_grpc.pb.go 文件。 实际SayHello由UnimplementedGreeterServer 结构实现
// GreeterServer is the server API for Greeter service. // All implementations must embed UnimplementedGreeterServer // for forward compatibility type GreeterServer interface { SayHello(context.Context, *HelloRequest) (*HelloReply, error) mustEmbedUnimplementedGreeterServer() } // UnimplementedGreeterServer must be embedded to have forward compatible implementations. type UnimplementedGreeterServer struct { } func (UnimplementedGreeterServer) SayHello(context.Context, *HelloRequest) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented") }
边栏推荐
猜你喜欢

智能合约安全——delegatecall (2)

PHP基础笔记-NO.1

在线监控机房内的UPS电源及运行环境,解决方案来了

【WPS-OFFICE-Word】 WPS中样式的运作原理?样式自动更新、自动改变如何处理?样式的管理方法?

Online monitoring of UPS power supply and operating environment in the computer room, the solution is here

MYSQL误删数据恢复

APT级全面免杀与企业纵深防御体系的红蓝对抗

红日安全内网渗透靶场-VulnStack-1

广告电商、泰山众筹、链动2+1,这3个模式到底怎么样?

Jenkins CI平台(二)
随机推荐
WEB 渗透之RCE
广告电商、泰山众筹、链动2+1,这3个模式到底怎么样?
Confused!Ali was abused on the one hand, but was fortunate to be promoted to Huawei's technology, and successfully got the offer, with an annual salary of 40w
fatal error: jni.h: No such file or directory
大佬,谁有空帮忙看下这个什么问题呢,我就读取MySQLsource print下,刚接触flink,
[Dataset][VOC] Rat dataset voc format 3001 sheets
在线监控机房内的UPS电源及运行环境,解决方案来了
BinaryIndexedTrees树状数组
【C语言学习笔记(七)】C语言重定向输入与输出
How does MySQL permanently support Chinese input once and for all?
With the help of Kubernetes kubekey speed installation
Install porterLB
微信小程序分享功能
CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
深度学习常用公式与命令总结(更新中)
fatal error: jni.h: No such file or directory
ROS仿真环境搭建
[Azure Event Hub] Create Event Hub Consume Client + Custom Event Position with Azure AD Authentication
普通用户如何利用小红书赚钱呢?小红书的流量是真的吗?
高数---级数