Go开发gRPC服务注册反射报错:未实现reflection.GRPCServer
解决gRPC反射注册的编译错误
你的问题出在reflection.Register的传参错误——这个函数需要接收的是gRPC服务器实例,而不是你自定义的业务服务结构体UserServer。
修正后的代码
把标记的错误行替换为传入grpcServer即可:
func setupGrpc() { lis, err := net.Listen("tcp", ":9000") if err != nil { log.Fatalf("failed to listen: %v", err) } s := followerservice.UserServer{} grpcServer := grpc.NewServer() gen.RegisterUserServiceServer(grpcServer, &s) // 修正:传入grpcServer实例而非自定义服务结构体 reflection.Register(grpcServer) if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %s", err) } }
原因说明
gRPC反射功能需要从grpc.Server实例中获取所有已注册的服务信息,而不是你的业务服务实现结构体。protoc生成的UnimplementedUserServiceServer已经帮你实现了所有服务的默认方法,但反射相关的逻辑是和服务器实例绑定的,不需要你手动实现GetServiceInfo方法——只要把正确的服务器实例传给reflection.Register,就能正常启用反射功能,方便CLI工具调用你的服务。
内容的提问来源于stack exchange,提问作者gingerbreadboy
相关产品推荐
相关产品推荐

