本来应该在Linux下搭建golang开发环境,下载protobuf源码,便可在Linux下直接编译,不用像在windows下安装配置起来这么麻烦了。但由于电脑内存有4g,开一个虚拟机电脑卡得十分拖慢工作效率。就只想在windows中搭建好golang环境。折腾了一天多,终于把这个问题搞定了,最终提出了源码安装的方案。
一、下载安装Golang for windows
1.下载golang:http://golang.org/dl/
windows系统下下载所需版本的msi或zip文件。两者区别主要是:zip版本直接解压即可完成安装。msi的需要像正常windows安装程序一样进行安装,最后也会生成跟zip文件解压后一样的目录文件。
2.设置环境变量
- $GOROOT 指向golang安装之后的根目录
- $GOBIN设置值为:%GOROOT%\bin。
- 设置$GOROOT变量为不同于$GOROOT路径的文件夹,主要用于安装golang的扩展包或放置GO工程目录的路径。
- 将%GOROOT%和%GOROOT%\bin加入到path变量中。
假如想利用liteIde编辑工程的话,需要选择好平台并在“View”——>“Edit Environment”中编辑.env文件,我的是win64.env文件,配置好$GOARCH (编译后的目标平台的处理器架构)、$GOOS(目标平台操作系统)、$GOBIN($GOROOT/bin)几个环境变量。
二、下载安装protobuf
- 下载:http://code.google.com/p/protobuf/wiki/Download?tm=2,选择下载protoc-x.x.0-win32.zip。其中下载列表中的protobuf-x.x.x.zip文件,主要是为Java/python/c++提供相关库编译源文件的,GO语言环境配置,就没必要下载了。
- 按照解压后文件夹中的readme文件说明,直接解压后的protoc.exe目录配置到path变量中即完成安装。
三、下载安装Goprotobuf
- 安装 hg 源代码管理工具http://mercurial.selenic.com/,Go 下载扩展包的时候需要用到相关命令。右上角直接下载windowsmsi版本的TortoiseHg,进行安装,安装完成之后TortoiseHg会自动将安装路径添加到系统path变量中。
- 在 GOPATH 目录下,新建 src 、pkg和bin 目录。
方案一:
按官方文档http://code.google.com/p/goprotobuf/source/browse/README中,
提到的安装方式为:go get -u code.google.com/p/goprotobuf/{proto,protoc-gen-go}
但是本机一直报错:invalid code.google.com/ import path "code.google.com/p/goprotobuf/{proto,protoc-gen-go}"
Google搜索中诸多人遇到这类问题,但是没有好的解决方案。看大括号括起来,猜测意思应该是将两个资源一起下载下来,便尝试了方案二
方案二:
go get code.google.com/p/goprotobuf/proto
go get code.google.com/p/goprotobuf/protoc-gen-go
此方案果然不报方案一种的错误了,但是新的问题又来了
G:\workspace\GoWorkspace\goextended>go get code.google.com/p/goprotobuf/protopackage code.google.com/p/goprotobuf/proto: Get https://code.google.com/p/goprot
obuf/source/checkout?repo=: dial tcp 173.194.127.34:443: ConnectEx tcp: A connection attempt failed because the connected party did not properly respond after a
period of time, or established connection failed because connected host has failed to respond.
妈蛋,网络问题,难道要翻墙不成。不过其实假如你网络不差,一直“go get”最终也是可以拿到资源的,比如我安装log4go和go-sql-driver/mysql包就这样试了十多二十次就get下来了。但是一直试着getproto和protoc-gen-go两个安装包,人品就没那么好了,一直get不下来。
网上一通乱搜,看有没有其他解决方案,仔细一想,其实go get下载东西,也是通过hg的版本同步来从google code代码仓库中pull下来的。所以就干脆利用TortoiseHg直接将代码从项目仓库地址中下载下来,再利用go install源码编译安装,不就大功告成了,便有了方案三。
方案三:
利用hg命令:hg clone https://code.google.com/p/goprotobuf/
将项目文件goprotobuf下载到cmd当前目录。或者可以通过下载https://code.google.com/p/goprotobuf/source/browse/ 中的zip文件,解压。两种方式均可。
clone下来的文件目录中就有proto和protoc-gen-go两个文件夹,两个文件夹里面一看就是一大堆.go文件,而没有proto.a之类的库文件,当然是需要另外编译安装的。
直接运行go install code.google.com/p/goprotobuf/proto,提示错误
can't load package: package code.google.com/p/goprotobuf/proto: cannot find package "code.google.com/p/goprotobuf/proto" in any of:
D:\Go\src\pkg\code.google.com\p\goprotobuf\proto (from $GOROOT)
G:\workspace\GoWorkspace\goextended\src\code.google.com\p\goprotobuf\proto (from $GOPATH)
一看错误就知道是未找到源代码文件,接下来大家应该知道怎么去做了。
最后的关键几步来了:
- 将clone的goprotobuf目录下的proto和protoc-gen-go两个文件夹拷贝到$GOPATH\src\code.google.com\p\goprotobuf\目录下
- 编译安装:go install code.google.com/p/goprotobuf/proto,goinstall code.google.com/p/goprotobuf/protoc-gen-go
- 编译安装完之后,便会在bin目录下看到protoc-gen-go.exe文件,并在pkg目录下生成了相关库文件,如proto.a
如此便安装完成了。
有疑问加站长微信联系(非本文作者)