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

 

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

 

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

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

  - 因为传递的数据的长度,类型甚至是新的字段的新增的造成不稳定,因此 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;

}

 

 

// 未完待续

转载于:https://www.cnblogs.com/lvhuatblog/p/9023150.html

你可能感兴趣的:(【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值)