登录
首页 >  Golang >  Go问答

GRPC 服务在GoLang中实现通用原型请求数据

来源:stackoverflow

时间:2024-03-23 15:00:32 401浏览 收藏

本文介绍了如何使用 gRPC 在 Go 中实现通用原型请求数据。作者提出了一个问题,即如何创建一个 gRPC 服务器和客户端,该服务器和客户端专门将 record 作为请求,但同时支持用户和权限等其他类型。文章给出了一个解决方案,即使用 oneof,它允许客户端发送 user 或 permissions。作者提供了 protobuf 定义和代码示例来展示如何实现通用原型请求数据。

问题内容

我有 3 个原型如下:

1 - 记录.proto

message record {
    int64 primarykey = 1;     

    int64 createdat = 2;
    int64 updatedat = 3;
}

2 - user.proto

import "record.proto";
message user {
    record record = 31;
    string name = 32;
    string email = 33;
    string password = 34;
}

3 - 权限.proto

import "record.proto";
    message permissions{
        record record = 31;
        string permission1= 32;
        string permission2= 33;
    }

问题1: 有没有一种方法可以在 golang 中实现 grpc 服务器和客户端,专门将 record 作为请求,但同时支持后面的两种类型。即用户和权限。 像这样的东西:

service databaseservice {
    rpc create(record) returns (response);
}

这样我就可以发送 grpc 客户端请求,如下所示:

Create(User) returns (Response);
Create(Permissions) returns (Response);

正确答案


您可以使用 oneof,它允许客户端发送 userpermissions。 参考https://developers.google.com/protocol-buffers/docs/proto3#oneof

message request {
    oneof request {
        user user = 1;
        permissions permissions = 2;
    }
}

因此客户端可以在请求中填写其中任何一个。

service DatabaseService {
    rpc Create(Request) returns (Response);
}

理论要掌握,实操不能落!以上关于《GRPC 服务在GoLang中实现通用原型请求数据》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>