Programmer

Will Change The World

go2go安装及使用

go的泛型草案已经出来一段时间了,喜欢尝鲜的朋友想必早都已经体验过了。但是基本也都是在playground上小小的尝试了一下。在playground上只能把所有代码写在一个文件里,那有没有方法体验一下在真正的项目中应用泛型呢?答案是有的,那就是go2go。

go2go是go源码中的一个分支,它并不是真正的支持了泛型,只是把泛型代码翻译成普通go代码,然后再编译的。后续go会真正从编译器的层面上支持泛型。

安装

首先拉取分支代码:

git clone https://github.com/golang/go -b dev.go2go

拉取源码后进行编译,编译要求首先已经安装了go的正式版本。同时也需要用到gcc等C语言编译器,当然如果没有用到cgo的需求,可以通过设置环境变量CGO_ENABLED=0来禁用cgo。

cd go2go/src
./all.bash   // on windows, use all.bat

执行过程可能遇到下面这样的错误:

《go2go安装及使用》

这是因为编译时默认使用的是$HOME/go1.4作为GOROOT,可以通过环境变量GOROOT_BOOTSTRAP来设置已存在版本的go的GOROOT。

export GOROOT_BOOTSTRAP=/usr/local/go  # 或 export GOROOT_BOOTSTRAP=$GOROOT

all.bash会首先执行所有的单元测试,我在测试net包的时候测试失败了,具体原因还没有查(不影响编译)。嫌弃测试执行时间长或者也测试失败的,可以执行make.sh跳过测试步骤直接进行编译。

编译完成后,可以在go2go/bin目录下看到有go和gofmt文件。

《go2go安装及使用》

使用go编译一个泛型函数后会发现编译失败了。那么为什么失败呢?go2go又去哪了呢?查看go2go/README.go2go.md文件可以看到正确的用法应该是

go tool go2go run x.go2

而go tool 实际是调用了GOPATH/pkg/tool/GOOS_GOARCH下面的程序,查看这个目录,果然可以发现go2go了。

《go2go安装及使用》

其实不用go tool xxxx,直接执行这些程序也是可以正常使用的。

《go2go安装及使用》

为了兼容不同版本的go以及方便使用,可以在PATH下创建个脚本go2go,并赋可执行权限:

#!/bin/bash

export GOROOT=/usr/local/go2go
export GO2PATH=~/go2

$GOROOT/pkg/tool/linux_amd64/go2go $@

再使用就可以在任意位置直接go2go run xx.go2了,是不是方便多了。

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注