当前位置:网站首页>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") }
边栏推荐
- 201709-3 CCF jason查询 (满分题解)
- OSError: [WinError 123] 文件名、目录名或卷标语法不正确
- Unable to start SinkRunner: { policy:org.apache.flume
- Cyanine5.5 alkyne|Cy5.5 alkyne|1628790-37-3|Cy5.5-ALK
- 要想成为黑客,离不开这十大基础知识
- ROS仿真环境搭建
- 【汇编语言02】第2章 寄存器——理论知识
- 2022年7月国产数据库大事记
- 不要小看 WebSocket!长连接、有状态、双向、全双工都是王炸技能
- Bytes to beat three sides take offer: network + GC + + IO + redis + JVM red-black tree + data structure, to help you quickly into the giant!!!!!
猜你喜欢
随机推荐
安装porterLB
七夕之前,终于整出了带AI的美丽秘笈
大佬,谁有空帮忙看下这个什么问题呢,我就读取MySQLsource print下,刚接触flink,
选出表中的中位数记录[构造左右边界 || 问题转换]
字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构,助你快速进大厂!!
VsCode preview Geojson data
vulnhub pyexp: 1
基于ck+redash构建MySQL慢日志+审计日志展示平台
LineSegmentTree线段树
系统太多,多账号互通如何实现?
87.(cesium之家)cesium热力图(贴地形)
Difference差分数组
[Dataset][VOC] Rat dataset voc format 3001 sheets
[Azure Event Hub] Create Event Hub Consume Client + Custom Event Position with Azure AD Authentication
OneNote 教程,如何在 OneNote 中设置页面格式?
金鱼哥RHCA回忆录:CL210管理计算资源--管理计算节点+章节实验
2022/08/02------Ugly number
mysql跨库关联查询(dblink)
【计网】二、物理层
程序员如何分分钟搞垮一个项目?









