赞
踩
我们在日常开发过程中进行网络通信和数据交换等应用场景中经常使用的技术是json或xml,最近接触了Google的Protobuf。
在查阅相关资料学习 ProtoBuf 以及研读其源码之后,发现其在效率、兼容性等方面非常出色。在以后的项目技术选型中,尤其是网络通信、通用数据交换等场景应该会优先选择 ProtoBuf。
下面详细的看下protobuf相关的内容
protobuf
(protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化,用于通讯协议、数据存储等领域和语言无关、平台无关、可扩展的序列化结构数据格式。
官方网站
:https://developers.google.cn/protocol-buffers
推荐:https://zhuanlan.zhihu.com/p/141415216
protobuf的几个特点
多语言,多平台。自定义源文件,存储类
高效。二进制数据交互格式,可以安装编译器protoc
将.proto
编译成各种文件 变成可以使用的类
扩展性好,兼容性好。可以在源文件更新数据结构
工作流程
在介绍如何使用protobuf之前,我们先看看它的工作流程,
对于序列化协议来说,使用方只需要关注业务对象本身,即 idl 定义,序列化和反序列化的代码只需要通过工具生成即可
定义数据结构,参考官方的实例
syntax = “proto2”;
package tutorial;
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
optional string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
这里边涉及到一些protobuf的一些语法规则,其中message
是定义一个消息类型的关键字,相当于在一些语言中定义类class
。每个message都会生成一个名字与之对应的类,该类公开继承自google::protobuf::Message。具体数据定义的语法规则,我们后面详细展开介绍(proto中2和3有些语法的区别)。
这里涉及到protoc编译器的下载和安装
下载地址:https://github.com/protocolbuffers/protobuf/releases
https://blog.csdn.net/weixin_43440680/article/details/122178381
tar -xzf protobuf-2.1.0.tar.gz
cd protobuf-2.1.0
./configure --prefix=$INSTALL_DIR
make
make check
make install
安装完成之后,可以使用protoc
命令对.proto
文件进行编译,生成对应的文件
protoc -I= s r c d i r − − p y t h o n o u t = src_dir --python_out= srcdir−−pythonout=dst_dir xxx.proto
- $src_dir 所在的源目录
- –python_out 生成python代码
- $dst_dir 生成代码的目录
- xxx.proto 针对那个proto文件生成接口
class Person(message.Message):
metaclass = reflection.GeneratedProtocolMessageType
class PhoneNumber(message.Message):
metaclass = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _PERSON_PHONENUMBER
DESCRIPTOR = _PERSON
class AddressBook(message.Message):
metaclass = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _ADDRESSBOOK
Writing A Message
#! /usr/bin/python
import addressbook_pb2
import sys
def PromptForAddress(person):
person.id = int(raw_input("Enter person ID number: "))
person.name = raw_input("Enter name: ")
email = raw_input("Enter email address (blank for none): ")
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-sxEtKzqR-1713002803559)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。