Windows 下让 Go 使用 protobuf
文章目录
protobuf 可以很方便地在各个语言里制定数据交换协议,通过绑定不同的语言进行编译,可生成相应的代码文件。针对 C++ 和 Java 语言的编译,非常简单,好像默认就能搞定(不知道是不是因为我本地 C++ 和 Java 的环境很完善有关),而针对 Go 语言进行编译,则有点麻烦,折腾了好一会,写个笔记备忘一下。
基本的配置步骤
- 安装 Go 语言,这个简单,直接安装就可以了。安装好后,记得把 bin 目录添加到系统的 PATH 变量里,这样就可以执行 go 命令了。
- 安装 hg 源代码管理工具,Go 下载扩展包的时候要用到的命令。
- 安装 goprotobuf 扩展包,先在环境变量里新建一个变量 GOPATH,指向一个你准备用来放置 Go 扩展包的路径,注意,GOPATH 所指向的路径需要与 GOROOT 不一样。
- 在 GOPATH 目录下,新建 src 和 pkg 目录。
-
安装 goprotobuf,使用如下命令即可安装
go get code.google.com/p/goprotobuf/{proto,protoc-gen-go}
<p> 如果前面配置正确的话,这一步应该不会提示什么错误。 </p> </li> <li> 上述命令安装成功后,即可在目录 $GOPATH/bin 里找到编译好的 protoc-gen-go.exe 程序,并且把 $GOPATH/bin 添加到系统的 PATH 里,这样从命令行执行的话,可以找到该命令。 </li> <li> 在 protobuf 的编译脚本里,加上下面这一行,就可以在编译的时候,编译出针对 go 语言的代码文件。 <pre class="src src-shell-script"><span style="color: #99968b">#</span><span style="color: #99968b">!bin/</span><span style="color: #8ac6f2;font-weight: bold">sh</span>
outDir=./out
#create folder or do something else
goSucceed=true protoc –go_out=$outDir/go live.proto if [ $? = 0 ]; then echo “build go protocol succeed” else goSucceed=false echo “build go protocol failed” fi
碰到的一些基础问题
如果出现如下错误:
<pre class="example">C:\Users\Administrator>go get -u code.google.com/p/goprotobuf/{proto,protoc-gen-
go} package code.google.com/p/goprotobuf/{proto,protoc-gen-go}: invalid code.google. com/ import path “code.google.com/p/goprotobuf/{proto,protoc-gen-go}”
<p>
我感觉多半是没设 GOPATH 环境变量,这个我没准确验证。
</p>
<p>
如果提示如下错误
</p>
<pre class="example">Administrator@DBXXT-20131216M /cygdrive/d/OpenSource/go-packages/src/goprotobuf
$ go get code.google.com/p/goprotobuf/{proto,protoc-gen-go} go: missing Mercurial command. See http://golang.org/s/gogetcmd package code.google.com/p/goprotobuf/proto: exec: “hg”: executable file not found in %PATH% package code.google.com/p/goprotobuf/protoc-gen-go imports code.google.com/p/goprotobuf/protoc-gen-go imports code.google.com/p/goprotobuf/protoc-gen-go: cannot find package “code.google.com/p/goprotobuf/protoc-gen-go” in any of: D:\Go\src\pkg\code.google.com\p\goprotobuf\protoc-gen-go (from $GOROOT) D:\OpenSource\go-packages\src\code.google.com\p\goprotobuf\protoc-gen-go (from $GOPATH)
<p>
的话,就是没有安装 hg 源代码管理工具。
</p>
文章作者 cookwhy
上次更新 2014-08-06