1.安装protobuf3版本

下载安装protobuf-3.1.0版本, 把 F:\Program Files\protoc-3.3.0-win32\bin\protoc.exe 文件路径添加到环境变量中。

查看是否安装成功,在命令行输入: proto --version

安装成功之后,就可以按照protobuf的规则编码和解码任何我们想要传输的数据了。

比起xml和json形式的数据传输,protobuf拥有更高的数据压缩比和压缩效率。

2.写test.proto文件

相当于给一个对象添加相应的属性。

//指定版本
//注意proto3与proto2的写法有些不同
syntax = "proto3";//包名,通过protoc生成时go文件时
package test;// 班级
message Class {int32 num = 1;repeated Student students = 2;
}// 学生
message Student {string name = 1;int32 age = 2;Sex sex = 3;
}//性别
enum Sex {MAN = 0;WOMAN = 1;
}

3.生成文件test.pb.go文件

.proto文件写好之后,不方便我们在代码中使用,需要利用刚才安装的proto工具生成一个我们可以在代码中方便实际调用的类。

这个类生成之后就变成我们和protobuf交换数据的桥梁,我们可以看懂和使用,protobuf也可以识别和解析。

生成test.pb.go文件之后.proto就不需要了,但是为了后期更改和代码可读性继续保留该文件。

test.pb.go具体代码我就不贴出来了,命令如下:  protoc --go_out=.  *.proto

4.测试和验证

package mainimport ("github.com/goinaction/learning/proto3-my/test""github.com/gogo/protobuf/proto""io/ioutil""os""log"
)func write() {c1 := &test.Class{Num: 1,Students: []*test.Student{{Name: "xiaoming", Age: 21, Sex: test.Sex_MAN},{Name: "xiaohua", Age: 21, Sex: test.Sex_WOMAN},{Name: "xiaojin", Age: 21, Sex: test.Sex_MAN},},}// 使用protobuf工具把struct数据类型格式化成字节数组(压缩和编码)data, _ := proto.Marshal(c1)// 把字节数组写入到文件中ioutil.WriteFile("test.txt", data, os.ModePerm)
}func read() {// 以字节数组的形式读取文件内容data, _ := ioutil.ReadFile("test.txt")class := new(test.Class)// 使用protobuf工具把字节数组解码成struct(解码)proto.Unmarshal(data, class)log.Println(class.Num)for _, v := range class.Students {log.Println(v.Name, v.Age, v.Sex)}
}func main() {write()read()
}

代码输出结果:

2018/11/02 16:18:52 1
2018/11/02 16:18:52 xiaoming 21 MAN
2018/11/02 16:18:52 xiaohua 21 WOMAN
2018/11/02 16:18:52 xiaojin 21 MAN

protobuf3使用,golang语言实现相关推荐

  1. log包在Golang语言的标准库中是怎么使用的?

    Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...

  2. 语言与golang语言运行速度_Golang语言情怀第3期 Go 语言数据类型

    本期给大家聊下Go语言的数据类型有哪些,数据类型用于声明函数和变量.数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. Go 语言 ...

  3. golang语言编译的二进制可执行文件为什么比 C 语言大(转载)

    最近一位朋友问我"为什么同样的hello world 入门程序"为什么golang编译出来的二进制文件,比 C 大,而且大很多.我做了个测试,来分析这个问题.C 语言的hello ...

  4. golang语言操作文件

    golang语言操作文件的示例 https://colobu.com/2016/10/12/go-file-operations/#more

  5. hbase rest api接口链接管理【golang语言版】

    # go-hbase-rest hbase rest api接口链接管理[golang语言版] 关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/b ...

  6. 语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍

    设计模式是什么 俗话说:站在别人的肩膀上,我们会看得更远.设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于 ...

  7. GoLang语言多版本管理工具--GVM入门介绍

    GoLang语言多版本管理工具--GVM入门介绍 GVM 由Josh Bussdieker(jbuss,jaja,jbussdieker)在Moovweb工作期间 GVM提供了一个管理Go版本的界面. ...

  8. 记录一次游戏服务器的压测调优记录(Golang语言)

    记录一次游戏服务器的压测调优记录(Golang语言) 来自:烧书煮石_ 记录一次游戏服务器的压测调优记录(Golang语言) - 简书 (jianshu.com) 前言 辛苦开发了一年的服务,终于要上 ...

  9. 组件分享之后端组件——基于Golang语言的游戏服务器框架leaf

    组件分享之后端组件--基于Golang语言的游戏服务器框架leaf 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类 ...

  10. golang语言 []interface{}和interface{}

    文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...

最新文章

  1. java domain层_java框架中的controller层、dao层、domain层、service层、view层
  2. 人人都在说SaaS热,客服领域里的SaaS巨头可能长什么样呢
  3. 2020年度总结(只有做好自己不喜欢的事情你才能做自己喜欢的事情)
  4. grafana—— worldPing APP 中文
  5. 开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
  6. Redis开发运维实践问题处理只内存检查
  7. 38行代码AC——UVA-167The Sultan‘s Successors(八皇后问题,附视频讲解)
  8. RHCS创建高可用集群apche服务器
  9. linux安装DNS服务命令,Linux下的安装和配置DNS服务器
  10. Java Short类hashCode()方法及示例
  11. 京东:妥善处理个别显卡售后的问题 不存在“金融化”情况
  12. plsql以及instantclient下载安装配置使用
  13. python操作键盘
  14. 【CGAL_几何内核】2D和3D线性几何内核
  15. 服务器Raid数据恢复,磁盘阵列数据恢复,raid 5数据恢复算法原理
  16. google 手气不错 的代码
  17. 中规中矩的输入两个正整数m和n,求其最大公约数和最小公倍数。
  18. 幂函数在计算机中怎么下,对数指数幂函数模拟计算机.doc
  19. error: ‘uint8_t’,‘uint16_t’ ,‘uint32_t’ does not name a type
  20. 解决佳能MG3080、MG2980打印机报错5B00无法打印的问题

热门文章

  1. Docker基础知识及安装部署
  2. windows系统下scheme语言编程环境的搭建
  3. 如何删除双系统中的ubuntu
  4. 正经分析iOS包大小优化
  5. 网站性能优化--实例分析篇
  6. 各种音视频编解码学习——————详解 h264 ,mpeg4 ,aac 等所有音视频格式
  7. 最短路径Floyd算法【图文详解】
  8. 三种嵌入式操作系统比较
  9. loadrunner 注册破解
  10. 秋招(2014.9起)