最近买了个pi,想在上面装个golang环境,用于学习,发现网上资料都不全,当我在看《Go语言学习笔记》的时候,发现里面有教如何在linux上编译安装Go,既然是源码自举编译,相信树莓派上面也一样可以支持,所以就试了一下:

背景:

  • golang暂时没有针对arm的预编译包,所以需要源码编译golang。
  • 自Go1.5实现自举(bootstrapping)以后,需要保留两个版本的Go环境。建议初学者先下载C版本的1.4,用GCC完成编译。
  • 自举是指用编译的目标语言编写其编译器,简单点说就是用Go语言编写Go编译器。请提前安装gcc、gdb、binutils等工具。

先安装Go1.4.3

# 1.下载源码
$ wget https://storage.googleapis.com/golang/go1.4.3.src.tar.gz

# 2.解压
$ sudo tar xf go1.4.3.src.tar.gz -C /usr/local/

# 3.因为最终要使用高版本的go,所以将其重命名
$ sudo mv /usr/local/go /usr/local/go1.4.3

# 4.进入源码目录,编译
$ cd /usr/local/go1.4.3/src
$ sudo ./make.bash

# 5.测试
$ /usr/local/go1.4.3/bin/go version
go version go1.4.3 linux/arm复制代码

接下来下载golang源码,并用Go1.4进行编译

# 1.下载源码(此处直接从github下载golang源码,因为不用fq)
$ cd /usr/local
$ sudo git clone https://github.com/golang/go

# 2.进入源码目录,使用Go1.4编译
$ cd /usr/local/go
$ sudo GOROOT_BOOTSTRAP=/usr/local/go1.4.3 ./make.bash

# 3.测试
$ /usr/local/go/bin/go version
go version devel +ca360c3992 Sat Oct 7 22:12:36 2017 +0000 linux/arm复制代码

编译部署完成,现在设置工作目录和环境变量

# 1.创建工作目录
sudo su
cd / && mkdir -p /data/www/go

# 2.添加环境变量并使其生效
vim /etc/profile
# 添加如下设置项
export GOROOT=/usr/local/go
export GOPATH=/data/www/go
export PATH=$GOROOT/bin:$PATH

# 保存退出,并使其生效
$ source /etc/profile

# 3.输出环境变量,看是否生效
$ go env
GOARCH="arm"
GOBIN=""
GOEXE=""
GOHOSTARCH="arm"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/data/www/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_arm"
GCCGO="gccgo"
GOARM="7"
CC="gcc"
GOGCCFLAGS="-fPIC -marm -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build406121462=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"复制代码

好了,编译成功,收工。

如果不想这么麻烦的话,可以在树莓派上使用docker来构建golang环境,也是极好的。

参考:

  • 《Go语言学习笔记》 -- 雨痕