[Go] 使用protobuf进行序列化和反序列化

先定义消息类型

orders.proto

syntax = "proto2";
package message;
message Orders {
required int32 order_id=1;
required string title=2;
}

在GOPATH创建目录和编译这个消息类型输出到该目录,包名是message

mkdir $GOPATH/src/message;protoc --go_out $GOPATH/src/message orders.proto 

编写go文件进行序列化和反序列化刚才生成的包里的类型结构体数据

package main

import "message"

import "github.com/golang/protobuf/proto"

import "fmt"

func main() {
    orders := &message.Orders{
        OrderId: proto.Int32(1),
        Title:   proto.String("第一个订单"),
    }
    //序列化成二进制数据
    ordersBytes, _ := proto.Marshal(orders)
    //反序列化二进制数据
    twoOrders := &message.Orders{}
    proto.Unmarshal(ordersBytes, twoOrders)
    fmt.Println(twoOrders.GetTitle())
    fmt.Println(twoOrders.GetOrderId())

}

原文地址:https://www.cnblogs.com/taoshihan/p/11980253.html

时间: 2024-08-30 11:28:16

[Go] 使用protobuf进行序列化和反序列化的相关文章

Java序列化、反序列化

序列化是干什么的 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化. 什么情况下需要序列化 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候: 当你想用套接字在网络上传送对象的时候: 当你想通过RMI传输对象的时候: 序列化的几种方式 在Java中socket传输数据时,数据类型往往比较难

Google 的Protobuf 的使用方式(序列化和反序列化工具-编解码)

1.google的protobuf是什么? 用于rpc的自定义协议,体积更小,序列化和反序列化的第三方库,和apache thrift是同一种技术. 2.rpc库的介绍? (1) RMI    remote  method  invocation   广泛用于EJB,实际上是一种跨机器的调用,通过网络传输,调用方A调用序列化字节码传输到B机器反序列化,调用B的方法,B回传结果后序列化网路传输,A反序列化成最终结果. 限制 : 只针对于Java语言. 特点 :网络传输代码自动生成   client

ProtoBuf 常用序列化/反序列化API 转

http://blog.csdn.net/sealyao/article/details/6940245 1.C数组的序列化和反序列化API [cpp] view plaincopy //C数组的序列化和序列化API bool ParseFromArray(const void* data, int size); bool SerializeToArray(void* data, int size) const; //使用 void set_people() { wp.set_name("sea

Google protobuf序列化以及反序列化

序列化的目的是将对象持久化到硬盘或者用于网络传输.java也提供了序列化技术,非常简单,只要实现Serializable接口即可.如下: public class commonService implements Serializable { private static final long serialVersionUID = 1L; } 这种方式有以下几个缺点:(1)无法跨语言    (2)序列化的码流太大   (3)序列化的性能差 下面我测试一下序列化一个对象后的大小,代码如下: pub

C# 使用 protobuf 进行对象序列化与反序列化

protobuf 是 google的一个开源项目,可用于以下两种用途: (1)数据的存储(序列化和反序列化),类似于xml.json等: (2)制作网络通信协议. 源代码下载地址:https://github.com/mgravell/protobuf-net: 开源项目地址如下:https://code.google.com/p/protobuf-net/. protobuf 工具类 DataUtils.cs 代码如下: nuget 包 Install-Package ServiceStack

序列化和反序列化[转]

http://tech.meituan.com/serialization_vs_deserialization.html #摘要序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中:另一方面,它们会以其他更容易理解的概念出现,例如加密.持久化.然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式.大数据量系统设计里面更为显著.恰当的序列化协议不仅可以提高系统的通用性.强健性.安全性.优化系统性

序列化和反序列化-刘丁

#一.定义以及相关概念 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分.通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型.在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象--这两个功能就是序列化和反序列化. 一般而言,TCP/IP协议的应用层对

Unity中进程间通信——使用Protobuf-net序列化与反序列化

基于ProtoBuf协议实现网络传输(上) Protobuf 全称Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式. 1. 它可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式. 2. 目前提供了 C++.Java.Python.C#等多种语言的 API. 3. Protobuf是google开源的序列化和反序列化工具,主要是用在网络游戏的消息结构体定义上.它相对于XML文件和Js

Protobuf-net在Unity中的序列化与反序列化

本篇中我们只讲解如何在Unity中对Protobuf-net进行序列化(Serialize)与反序列化(Deserialize),关于Unity的socket(插座)网络通信部分我们后续开篇. 首先去Protobuf-net的Google下载点下载protobuf-net类库:https://code.google.com/p/protobuf-net/downloads/list这里用的是目前最新的protobuf-net r668下载完毕后打开压缩包,在Full\unity中找到protob