本来应该在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

  1. 下载: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语言环境配置,就没必要下载了。
  2. 按照解压后文件夹中的readme文件说明,直接解压后的protoc.exe目录配置到path变量中即完成安装

三、下载安装Goprotobuf

  1. 安装 hg 源代码管理工具http://mercurial.selenic.com/,Go 下载扩展包的时候需要用到相关命令。右上角直接下载windowsmsi版本的TortoiseHg,进行安装,安装完成之后TortoiseHg会自动将安装路径添加到系统path变量中。
  2. 在 GOPATH 目录下,新建 src 、pkg和bin 目录。
安装Goprotobuf有三种方案:

方案一:

按官方文档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)

一看错误就知道是未找到源代码文件,接下来大家应该知道怎么去做了。

最后的关键几步来了:

  1. 将clone的goprotobuf目录下的proto和protoc-gen-go两个文件夹拷贝到$GOPATH\src\code.google.com\p\goprotobuf\目录下
  2. 编译安装:go install code.google.com/p/goprotobuf/proto,goinstall code.google.com/p/goprotobuf/protoc-gen-go
  3. 编译安装完之后,便会在bin目录下看到protoc-gen-go.exe文件,并在pkg目录下生成了相关库文件,如proto.a

如此便安装完成了。