专栏首页solate 杂货铺mac 上安装Protobuffer

mac 上安装Protobuffer

挑战A.I.,赢百万奖金......了解更多详情>>>

介绍

Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。现阶段支持C++、JAVA、Python等三种编程语言。

https://github.com/golang/protobuf

安装

方式1:

我使用这个方式并没有成功,使用方式2

  1. 下载protobuf
git clone https://github.com/google/protobuf.git 
  1. 下载automake
$ brew install automake  
$ brew install libtool  
//有些还说需要这个
$ brew install autoconf
  1. 运行autogen.sh
//首先cd 到git clone 的protobuf/ 目录下,运行 ./autogen.sh  
$ ./autogen.sh  
  1. 安装
$ ./configure  
$ make check  
$ make  
$ make install  

Mac上安装Protobuf

google protobuf ios开发使用

方式2

iOS中从零开始使用protobuf

How To Install Protobuf

Building the Objective-C Protobuf compiler
Check if you have Homebrew
brew -v
If you don't already have Homebrew, then install it
ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
Install the main Protobuf compiler and required tools
brew install automake
brew install libtool
brew install protobuf
(optional) Create a symlink to your Protobuf compiler.
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
Clone this repository.
git clone https://github.com/alexeyxo/protobuf-objc.git
Build it!
  1. 首先,打开终端! 查看你的mac里面有没有装brew。brew是mac os里面,类似于ubuntu的apt-get的功能,都可以直接在终端输入命令然后安装程序。-v自然就是版本version的意思
brew -v
  1. 如果没装就安装brew
ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
  1. 安装依赖并下载
brew install automake
brew install libtool
brew install protobuf

4.安装工程

git clone https://github.com/alexeyxo/protobuf-objc.git
//cd 进入protobuf-objc
./build.sh

从github下载protobuf-objc这个工程,build脚本里面做的是编译

注意:编译工程过程中,有可能会出现错误。别慌!看编译错误的提示。一般错误只是因为环境变量和路径没有配置好,少了一些东西,例如少了编译protobuf这个工程的依赖库,按照提示添加路径即可

有了工程以后,我们就可以开始测试一下怎么用protobuf了

使用

在 Golang 中使用 Protobuf

go 使用protobuffer proto3

protobuffer 有proto3 和 proto2 的区别,因为我的项目里必须使用proto2,所以需要另外处理。

编译命令:

protoc --go_out=. *.proto

Protobuf 的 proto3 与 proto2 的区别

这是一篇学习笔记。在粗略的看了 Protobuf 的文档中关于 proto2 和 proto3 的说明后,记录下了几点 proto3 区别于 proto2 的地方。

总的来说,proto3 比 proto2 支持更多语言但 更简洁。去掉了一些复杂的语法和特性,更强调约定而弱化语法。如果是首次使用 Protobuf ,建议使用 proto3 。

1.在第一行非空白非注释行,必须写:syntax = "proto3";

2.字段规则移除了 “required”,并把 “optional” 改名为 “singular”;

在 proto2 中 required 也是不推荐使用的。proto3 直接从语法层面上移除了 required 规则。其实可以做的更彻底,把所有字段规则描述都撤销,原来的 repeated 改为在类型或字段名后加一对中括号。这样是不是更简洁?

3.语言增加 Go、Ruby、JavaNano 支持;

4.移除了 default 选项;

在 proto2 中,可以使用 default 选项为某一字段指定默认值。在 proto3 中,字段的默认值只能根据字段类型由系统决定。也就是说,默认值全部是约定好的,而不再提供指定默认值的语法。

在字段被设置为默认值的时候,该字段不会被序列化。这样可以节省空间,提高效率。

但这样就无法区分某字段是根本没赋值,还是赋值了默认值。这在 proto3 中问题不大,但在 proto2 中会有问题。

比如,在更新协议的时候使用 default 选项为某个字段指定了一个与原来不同的默认值,旧代码获取到的该字段的值会与新代码不一样。

另一个重约定而弱语法的例子是 Go 语言里的公共/私有对象。Go 语言约定,首字母大写的为公共对象,否则为私有对象。所以在 Go 语言中是没有 public、private 这样的语法的。

5.枚举类型的第一个字段必须为 0 ;这也是一个约定。

6.移除了对分组的支持;

分组的功能完全可以用消息嵌套的方式来实现,并且更清晰。在 proto2 中已经把分组语法标注为『过期』了。这次也算清理垃圾了。

7.旧代码在解析新增字段时,会把不认识的字段丢弃,再序列化后新增的字段就没了;

在 proto2 中,旧代码虽然会忽视不认识的新增字段,但并不会将其丢弃,再序列化的时候那些字段会被原样保留。

我觉得还是 proto2 的处理方式更好一些。能尽量保持兼容性和扩展能力,或许实现起来也更简单。proto3 现在的处理方式,没有带来明显的好处,但丢掉了部分兼容性和灵活性。

8.移除了对扩展的支持,新增了 Any 类型;

Any 类型是用来替代 proto2 中的扩展的。目前还在开发中。

proto2 中的扩展特性很像 Swift 语言中的扩展。理解起来有点困难,使用起来更是会带来不少混乱。

相比之下,proto3 中新增的 Any 类型有点想 C/C++ 中的 void* ,好理解,使用起来逻辑也更清晰。

9.增加了 JSON 映射特性;

语言的活力来自于与时俱进。当前,JSON 的流行有其充分的理由。很多『现代化』的语言都内置了对 JSON 的支持,比如 Go、PHP 等。而 C++ 这种看似保罗万象的学院派语言,因循守旧、故步自封,以致于现出了式微的苗条。

go 使用protobuffer proto3

相关问题

  1. 没有proto.ProtoPackageIsVersion2

升级,新版本的已经有了

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

Building Go in performance tests suite is broken

2.mac 10.12.1 安装出现问题(按照这个方法未解决问题)

 ./configure CPPFLAGS="-Wno-deprecated-declarations"

Deprecated atomic function invocation on MacOS Sierra

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql按条件计数的几种方法

    最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况。尝试了几种方法,下面简要记录,供大家参考。

    solate
  • slice 去重

    solate
  • go语言学习-位运算

    Go语言的大多数位运算符与C语言都比较类似,除了取反在C语言中是~x,而在Go语言中 是^x

    solate
  • 大咖论道 | 罗静:敞开大门,让企业走进博物馆!

    ? ···前情背景··· 近日,被称为第八届博博会上最吸引人的论坛,即技术创新与博物馆发展高峰论坛成功展开。 论坛主题围绕“协同创新,跨界融合”,探讨人工智能...

    腾讯文旅
  • Express中间件,看这篇文章就够了(#^.^#)

    底层:http模块 express目前是最流行的基于Node.js的web开发框架,express框架建立在内置的http模块上, var http = req...

    okaychen
  • Adgetec公司CEO、畅销书作者Mark Mueller-Eberstein:云计算大数据推动业务创新发展

    【CSDN现场报道】2015年6月3-5日,作为云计算领域最具影响力的盛会——第七届中国云计算大会在国家会议中心盛大开幕。大会以“促进云计算创新发展,培育信息产...

    CSDN技术头条
  • 模拟登录?一文为你排忧解惑!

    通过前两天的小demo,大家是不是对Spider有了进一步的了解。是不是感觉通过短短几行代码就能够获取并保存我们想要保存的内容就很神奇,其实这些都没什么。总之,...

    不温卜火
  • JavaWeb之MVC模式

    一、什么是MVC设计模式? MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Mode...

    用户1195962
  • BOM大详解

    了解: 1.BOM架构全局对象的使用. 2.根据案例来讲解 3:大总结。 4;效果.

    用户7873631
  • Gartner发布2021年重要战略科技趋势

    全球领先的信息技术研究和顾问公司Gartner于今日发布企业机构在2021年需要深挖的重要战略科技趋势。分析师们在本周举行的Gartner IT Symposi...

    边缘计算

扫码关注云+社区

领取腾讯云代金券