介绍

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准
Protocol Buffers 是一种轻便高效的结构化数据存储格式

  • 可以用于结构化数据串行化,或者说序列化。
  • 它很适合做数据存储或 RPC 数据交换格式。
  • 可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

支持语言很多,C++ java python php golang 等,支持列表

Language Source
C++ (include C++ runtime and protoc) src
Java java
Python python
Objective-C objectivec
C# csharp
JavaNano javanano
JavaScript js
Ruby ruby
Go golang/protobuf
PHP allegro/php-protobuf

protobuf 3.0 与 之前的 protobuf 2.6 的语法是不一样的

安装 ProtoBuf

安装 2.6

  1. # 查看protobuf信息
  2. brew info protobuf
  3. # 安装
  4. brew install protobuf
  5. # 检查安装结果
  6. protoc --version
  7. libprotoc 2.6.1

Linux 请查询 apt-get or yum

Windows protbuf 2.6.1

安装 3.0 版本

因为3.0在开发中,不能直接使用brew安装稳定版

  • 可以选择让brew安装开发版
  • 可以选择编译安装开发版本,编译过程需要自备梯子

-Windows protobuf 3.0.2

brew tap 安装

http://brewformulas.org/Protobuf

  1. ~ brew tap homebrew/versions
  2. ~ brew info protobuf
  3. protobuf: stable 3.0.2 (bottled), HEAD
  4. Protocol buffers (Google's data interchange format)
  5. https://github.com/google/protobuf/
  6. /usr/local/Cellar/protobuf/2.6.1 (121 files, 6.9M) *
  7. Poured from bottle on 2016-09-07 at 12:08:43
  8. From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/protobuf.rb
  9. ==> Dependencies
  10. Build: autoconf ✔, automake ✔, libtool ✔
  11. ==> Options
  12. --c++11
  13. Build using C++11 mode
  14. --universal
  15. Build a universal binary
  16. --with-test
  17. Run build-time check
  18. --without-python
  19. Build without python support
  20. --HEAD
  21. Install HEAD version
  22. ==> Caveats
  23. Editor support and examples have been installed to:
  24. /usr/local/Cellar/protobuf/3.0.2/share/doc/protobuf
  25. ➜ ~brew install protobuf

编译安装

因为3.0在开发中,不能直接使用brew安装,需要编译,编译过程需要自备梯子

下载源码 https://github.com/google/protobuf

protobuf release tag 3.0.0

编译过程需要 gtest

  1. brew info automake
  2. brew info libtool
  3. # 没有这两个就安装
  4. ./autogen.sh
  5. # 检查没问题了
  6. ./configure
  7. make -j4
  8. make check
  9. make install

检查安装结果

  1. protoc --version

安装golang for protobuf插件

需要

  1. go get -u -v github.com/golang/protobuf/proto
  2. go get -u -v github.com/golang/protobuf/protoc-gen-go

请将你的$GOPATH/bin 设置为环境变量,这样才可以使用protoc-gen-go

使用protobuf

说明:本用例是在protobuf version 2.6.1中执行

编写 proto 文件

使用文本编辑器编辑文件 Im.helloworld.proto,内容为

请认真对待 proto 文件的文件名,常用规则packageName.MessageName.proto

  1. package Im;
  2. enum FOO { X = 17; };
  3. message helloworld
  4. {
  5. required int32 id = 1; // Id
  6. required string str = 2; // Str
  7. optional int32 opt = 3; // Opt optional field
  8. }

解释这个文本

  • package 名字叫做 Im
  • 定义了一个消息 helloworld
  • 该消息有三个成员,类型为 int32 的 id,另一个为类型为 string 的成员 str。opt 是一个可选的成员,即消息中可以不包含该成员

编译 .proto 文件

  1. protoc --go_out=. Im.helloworld.proto
  2. # 编译当前目录下所有的proto文件
  3. protoc --go_out=. *.proto

出现错误提示,请检查上面的安装过程

生成的文件为 Im.helloworld.pb.go

内容主体有

  1. const (
  2. FOO_X FOO = 17
  3. )
  4. type Helloworld struct {
  5. Id *int32 `protobuf:"varint,1,req,name=id" json:"id,omitempty"`
  6. Str *string `protobuf:"bytes,2,req,name=str" json:"str,omitempty"`
  7. Opt *int32 `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty"`
  8. XXX_unrecognized []byte `json:"-"`
  9. }

测试这个生成代码

编写测试代码

  1. package main
  2. import (
  3. "github.com/golang/protobuf/proto"
  4. "example"
  5. "fmt"
  6. )
  7. func main() {
  8. // 创建一个消息 Info
  9. info := &example.Helloworld{
  10. Id: proto.String("hello"),
  11. Str: proto.Int32(17),
  12. }
  13. // 进行编码
  14. data, err := proto.Marshal(info)
  15. if err != nil {
  16. fmt.Printf("marshaling error: ", err)
  17. }
  18. // 进行解码
  19. newInfo := &example.Helloworld{}
  20. err = proto.Unmarshal(data, newInfo)
  21. if err != nil {
  22. fmt.Printf("unmarshaling error: ", err)
  23. }
  24. if info.GetId() != newInfo.GetId() {
  25. fmt.Printf("data mismatch %q != %q", info.GetId(), newInfo.GetId())
  26. }
  27. }

测试运行一下,如果出现问题或者代码有误,请自行解决一下~~

mac 下配置 protobuf golang插件 并使用的更多相关文章

  1. mac 下配置protobuf 3.0 golang环境

    protobuf 3.0  与 之前的 protobuf 2.6 的语法是不一样的.需要重新安装一下,本机的环境是 OS X Yosemite  10.10.2 1. 不采用home brew安装,用 ...

  2. mac下配置gdb调试golang

    mac下配置gdb调试golang 原文链接 https://sourceware.org/gdb/wiki/BuildingOnDarwin Building GDB for Darwin Crea ...

  3. 【高可用HA】Apache (4) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk httpd版本: httpd-2.4.17 jk版本: tomcat-connectors-1.2.41 参考 ...

  4. 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy httpd版本: httpd-2.4.17 参考来源: Apache (1) -- Mac下安装Apac ...

  5. mac下配置开发环境

    常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...

  6. 在Mac下配置php开发环境:Apache+php+MySql

    /private/etc/apache2/httpd.conf 一.启动Apache sudo apachectl start sudo apachectl -v   可以查看到Apache的版本信息 ...

  7. iOS开发MAC下配置svn

    版本控制对于团队合作显得尤为重要,那么如何在iOS开发中进行版本控制呢?在今天的博客中将会介绍如何在MAC下配置SVN服务器,如何导入我们的工程,如何在Xcode中进行工程的checkOut和Comm ...

  8. mac下配置openfire

    下载 在浏览器中打开如下网址http://www.igniterealtime.org/downloads/index.jsp,根据你的操作系统选择对应的版本进行下载,这里我是在mac下配置的,所以选 ...

  9. Mac下配置idk

    Mac下配置java #以下进入啰嗦模式演示添加jdk7 #下载jdk7的mac版 #官网下载地址http://www.oracle.com/technetwork/java/javase/downl ...

随机推荐

  1. luogu2153 [SDOI2009]晨跑

    要想限制流量,总要想着拆点. #include <iostream> #include <cstring> #include <cstdio> #include & ...

  2. 微信小程序的那些坑

    早闻微信小程序是个坑,结果名不虚传,细数一下我开发小程序遇过到坑. 1.UI组件过度封装. 微信小程序的组件是模仿react.js或vue.js的web组件设计的,并且封装了weui.css样式. P ...

  3. Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...

  4. Leetcode 450.删除二叉搜索树的节点

    删除二叉搜索树的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来 ...

  5. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)

    A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. AtCoder Beginner Contest 070

    我好想有点思维江化,所以我想给这个丝毫没有问题的abc也写下 A - Palindromic Number Time Limit: 2 sec / Memory Limit: 256 MB Score ...

  7. Java众神之路(1)-语言介绍

    Java语言介绍 1.Java的历史 我个人认为,学习一种技术,不止要关注技术本身,也应该去了解一下它的发展史,这一方面是对技术本身的尊重,另一方面也是希望能够通过该技术的发展历史推测出其未来可能的发 ...

  8. APUE 学习笔记(二) 文件I/O

    1. 文件I/O 对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件 open函数:O_RDONLY  O_WRONLY  O_RDWR create函数: close函 ...

  9. batch.bat explaination

    1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置. 语法 echo [{on|off}] [message] Sample篅echo of ...

  10. hdu 4311 & 4312 Meeting point 曼哈顿距离之和最小

    hdu 4311 题意 平面上\(n(n\leq 1e5)\)个点,找一个点到其它所有点的曼哈顿距离之和最小. 思路 如果是找一个坐标使得所有点到其曼哈顿距离之和最小,那么将\(n\)个横坐标排个序, ...