首页 > 其他 > 详细

【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值

时间:2018-05-11 12:04:04      阅读:180      评论:0      收藏:0      [点我收藏+]

 

技术分享图片

 

当你从客户端接收到一串序列化后的数据,你需要

  - 修改其中某一个标签的值,然后把它传递到真正的业务数据,这样每个业务模块(微服务)就不需要和公共授权服务打交道了。

  - 因为传递的数据的长度,类型甚至是新的字段的新增的造成不稳定,因此 network->originBytes - > Marshal() -> Object -> Unmarshal()->newBytes->Logic Service 会造成很大的损耗

 

因此设想是否考虑一个优化方式: network->originBytes -> Modify()->newBytes->Logic Service  

设计到的操作可能有:修改Tag对应值,删除Tag对应值,新增Tag对应值

挑战在于:

  - 需要对ProtoBuffer的编码熟知(本文不提,自行查阅相关资料),当然也可以直接从Proto库拷贝代码出来使用

       - ProtoBuffer的类型值是变长的 int64(1024*1024*1024) 和 int64(1024)编码后的长度不是相同的,因此不能单纯地在原来的[]byte进行修改。

 

本文不考虑一些复杂类型的修改,仅修改基本的类型,假设你有一个Message

 

message SubMsg {

           uint32 un32 = 1;

}

message MyMsg {

       string str = 1;

  int32 n32 = 2;

       float64 f64 = 3;

  repeated int64 n64 = 4; 

  SubMsg subMessage = 5;

}

 

 

// 未完待续

【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值

原文:https://www.cnblogs.com/lvhuatblog/p/9023150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!