Mac下Go安装配置并使用Protobuf

首先使用Home Brew安装Protobuf:

brew install protobuf

安装好之后,查看是否安装成功

protoc --version

如果成功会有如下类似的版本号显示:

libprotoc 3.1.0
这表明我安装成功,并且版本号是3.1.0。

接着安装protobuf的golang插件

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

因为protoc需要依赖调用protoc-gen-go,所以,它的路径必须要添加到环境变量里面去。
它存在于$GOPATH/bin之下。
我使用的shell是zsh,因此需要修改配置`/.zshrc
在最后添加配置:

export GOPATH=$HOME/Documents/golang/
export GOBIN=$GOPATH/bin
export PATH="$GOBIN:$PATH"

保存,然后重开zsh,即可。

我的workspace看起来是这样的文件夹结构:

protobuf协议源文件放在了protocol/proto下面
helloworld.proto

 syntax = "proto2";

package test;

message helloworld 

    required int32     id = 1;  // ID 
    required string    str = 2;  // str 
    optional int32     opt = 3;  //optional field 
}
在这里需要注意几点:
1.如果不定义package,编译器会自行的将文件名生成package名,如上面的例子将会生成一一个package helloword;
2.因为golang遵循的是驼峰规则,message和field的名字首字母将会自动转为大写字母(如果首字母为下划线,则下划线会被自动转换为大写的X),而package名则不会;

接着我们就可以用命令行编译出go代码了:

protoc --go_out=. helloworld.proto
运行该命令之后,如果协议没有语法错误,则会在proto文件同级目录下生成一个hellword.pb.go的代码文件,接着我们就能直接拿来用了。

如果是一个proto文件,使用一条命令生成是没有问题的,但是在现实中,并不会只有一个,会有多个,那么就需要有批量的生成工具了,在mac/linux下面使用shell脚本可以搞定,在Windows下可以用bat批处理脚本搞定,下面给一个mac下的shell脚本示例代码:
generate_code.sh

path=$(dirname $0)
path=${path/\./$(pwd)}
#echo $path

# /////////////////////////////////////////////////////////////////////////////
#
# 编译Protobuf协议
#
# /////////////////////////////////////////////////////////////////////////////

protoc --version

protoc --go_out=$path/../ -I=$path $path/helloworld.proto
记得修改文件可执行权限,我就很偷懒,用:chmod 777 generate_code.sh搞定。

最后写go的测试代码了:
testpb.go

package main

import (
    "./protocol"
    "fmt"
    "github.com/golang/protobuf/proto"
    "log"
)

func main() {

    // 创建一个消息
    data_encode := &test.Helloworld{
        Id:  proto.Int32(11),
        Str: proto.String("hello world!"),
        Opt: proto.Int32(17),
    }

    // 进行编码
    data, err := proto.Marshal(data_encode)
    if err != nil {
        log.Fatal("marshaling error: ", err)
    }

    // 进行解码
    data_decode := &test.Helloworld{}
    err = proto.Unmarshal(data, data_decode)
    if err != nil {
        log.Fatal("unmarshaling error: ", err)
    }

    // 测试结果
    if data_encode.GetId() != data_decode.GetId() {
        log.Fatalf("data mismatch %q != %q", data_encode.GetId(), data_decode.GetId())
    }
    fmt.Println("ID:", data_decode.GetId())
    fmt.Println("Str:", data_decode.GetStr())
    fmt.Println("Opt:", data_decode.GetOpt())
}
这里需要注意的是,import里面所填写的是go文件的路径,而无需要填写文件名,也就是go文件的搜索路径,默认的根目录是$GOPATH/src,如果是放在src里面,则直接写"protocol"即可,但是我不希望如此,我把它放在了测试go文件的同级目录下了,那么,我就需要这样写"./protocol"(需要注意的是,斜杠只能写/而不能\)。

好了,现在开始编译:

go build testpb.go

接着是执行:

./testpb

预期的结果是这样的:

下面是测试代码的完整打包:
/Files/tx7do/test_pb_go.zip

时间: 2024-11-08 17:59:45

Mac下Go安装配置并使用Protobuf的相关文章

MAC下mysql安装配置方法图文教程_Mysql

一.下载MySQL     访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到"MySQL Community Server"下方有一个"download"点击. 进入MySQL的下载界面(http://www.mysql.com/downloads/mysql/),如果你是用的Mac OS来访问的话那么就会默认为你选好了Mac OS X 平台,而下面罗列的都是在Mac OS上能用的MySQL的版本,如果是用的其他

Mac 下Xcode安装配置phonegap教程

官网的安装页面http://phonegap.com/install/ 一行安装  代码如下 复制代码 $ sudo npm install -g phonegap 忽悠人的吧,按之前的配置环境的经验表示不太相信,安装成后,运行  代码如下 复制代码 $ phonegap 每个程序员都是从"hello world"开始的继续  代码如下 复制代码 $ phonegap create hello world 按照官网的说明,最后一步就是  代码如下 复制代码 $ phonegap run

mac下mqsql安装后连接不上!!!

问题描述 mac下mqsql安装后连接不上!!! 我只是安装了mysql,不懂终端配置,,试了下网上的终端修改密码,都修改不来!!!! 解决方案 MAC连接安卓手机安装apk---------------------- 解决方案二: 如果不是没给root@localhost授权的话,就是密码错误.我以前遇到过一次,windows下,当时手误把密码改成乱码,后来在通过命令行修改密码才解决了 解决方案三: 你只是安装了,有没有设置初始密码,一般默认安装是没有密码的,需要初始化密码才可以登录 你直接执

Windows下MySQL安装配置方法图文教程_Mysql

Windows下的安装与配置MySQL详细步骤思路,分享给大家,供大家参考,具体内容如下 本文介绍Windows XP下的安装与配置. 要想在Windows中运行MySQL,需要: Ø 32位Windows操作系统,例如9x.Me.NT.2000.XP或Windows Server 2003. 基于Windows NT的操作系统(NT,2000,XP,2003),将MySQL服务器做为服务来运行.强烈建议使用基于Windows NT的操作系统. Ø TCP/IP协议支持(也许是所有数据库系统的基

Linux下Redis安装配置教程_Redis

redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的.项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便redis.memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求:但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加

Redis 对比 Memcached 并在 CentOS 下进行安装配置详解_Redis

Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,本篇文章主要介绍了Redis 对比 Memcached 并在 CentOS 下进行安装配置详解,有兴趣的可以了解一下. 了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完成安装工作,并让它开始与应用程序顺畅协作.换句话来说,只需投入一小部分时间与精力,大家就能获得立竿

linux下Golang安装配置教程

做为运维人员,使用python语言足矣,理论上是无需了解golang的.不过最近发现一个新潮的监控系统都是基于golang进行开发的,如小米公司的Open-Falcon(github项目页) .stack exchange 公司的Bosun (github项目页). 一.Go的三种安装方式 Go有多种安装方式,你可以选择自己喜欢的.这里我们介绍三种最常见的安装方式: Go源码安装:这是一种标准的软件安装方式.对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装可以自己定制. Go标准

在Mac下如何安装phpredis扩展_服务器其它

最近把开发环境从windows转到Mac下,所有的环境都要重新来配置.由于Mac是基于unix系统的不太熟悉,所以遇到了很多问题,下面小编给大家整理下分享给大家. 安装phpredis扩展: 首先,大家先下载phpredis的扩展包,这是地址https://nodeload.github.com/nicolasff/phpredis/zip/master(建议大家手动下载再进行复制). 其次,大家使用命令进入文件夹    复制代码 代码如下: cd phpredis-master/   phpi

linux 6下编译安装配置LAMP平台

LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl.PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富.轻量.快速开发等特点,微软的.NET架构相比,LAMP具有通用.跨平台.高性能.低价格的优势,因此LAMP无论是性能.质量还是价格都是企业搭建网站