iframe的src怎么携带参数_三种传递gRPC动态参数方式的使用体验

本文探讨了在gRPC中传递动态参数的方法,包括使用bytes编码JSON对象、Map类型和proto.Struct。重点介绍了每种方式的优势和适用场景,如通过编码JSON避免类型转换,Map限制值类型,以及proto.Struct的原生动态支持。最终建议使用bytes传递JSON对象参数最为便捷。
摘要由CSDN通过智能技术生成

gRPC是一个远程调用框架,使用Protobuf做为信息的载体来完成客户端和服务端的数据传输。关于怎么定义Protobuf消息、搭建gRPC服务在之前的系列文章中都有提及,今天来说一下在使用gRPCProtobuf的过程中怎么传递动态参数。

首先说明一下,这里所说的动态参数指的是在定义Protobuf消息时还不能确定其具体内容的复合类型字段,简单的说就是消息里的这个字段我们想传一个类似JSON对象、Map字典、结构体等等这样的组合值,但是JSON里有哪些字段、每个字段值是什么类型或者Map字典键值的类型我们在定义消息时还无法确定(能确定就可以定义子消息嵌套进来了,不在本文的讨论范围内),把这样的Protobuf消息字段叫做动态参数。

针对通过Protobuf传递动态参数的需求,官方文档里并没有给出标准的解决方案,目前我所知道的能够通过bytesMap以及proto.Struct这三种Protobuf消息字段的类型实现,每种方式也都有自己的优势和劣处,如果你碰巧知道更好的实现方案,欢迎在评论里留言讨论。

下面我们就来看一下使用这三种消息字段的类型如何实现动态参数的传递。

使用bytes传递JSON对象参数

Protobuf里的bytes类型的字段编码成Go代码后对应的是Go里的字节切片[]byte类型。所以我们可以把动态参数的字段类型定义成bytes类型,这样客户端把JSON对象传递到服务端后,服务端能直接对动态参数里包含的JSON对象做解码操作,省去了一次从string[]byte的类型转换。

举个例子来说,在下面的Protobuf消息定义里info字段的类型是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值