JobPlus知识库 IT 其它 文章
区块链Golang的编译安装

简单方式:

    直接网上下载golang的二进制包,解压到制定位置,并配置环境变量。就OK.

 

Go的官方仓库地址:

https://go.googlesource.com/go

 

Go的github的仓库地址:

https://github.com/golang/go

 

Go的官网地址:

https://golang.org

 

按照网上的教程,来安装Go时,报错,出现了:

ERROR: Cannot find /root/go1.4/bin/go.

Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

查看了下 make.bash,里面是在 '$HOME/go1.4',查找 'Go编译器',确实并未找到。


 

Go高版本的编译过程需要Go1.4的二进制来实现引导(bootstrap),简单来说就是:

Go需要Go自身来编译

 

解决方法:

1.获取Go源码

2.首先编译Go1.4(Go 1.4是C编写的Go工具链的最后一个分发版-官方文档写的。所以它的编译不需要Go编译器,用gcc和glibc-devel。)

3.编译好的Go1.4二进制,来编译Go高版本

 

步骤:

1.之前已经安装过老版本Go,清除相关环境变量:$GOPATH,$GOROOT

2.安装git // 一般都有

3.安装gcc和glibc-devel // 一般都有

4.下载go源码

cd ~

git clone git@github.com:golang/go.git

cd go

git checkout -b 1.4.3 go1.4.3 // -b 1.4.3 不用也可以,它会创建一个新分支

cd src

./all.bash // 也可简单运行 './make.bash'

编译好的go 1.4.3 版本,默认存储在 ~/go // 在我们执行完 './make.bash' 也有安装目录提示

5.复制 ~/go 到 $GOROOT_BOOTSTRAP 指定的目录(高版本的Go的构建脚本,该变量值默认是:~/go1.4)

cp -rf ~/go ~/go1.4

6.构建好 go 1.4低版本,我们现在可以开始安装高版本,它借助1.4.3版本的go

cd ~/go

git clean -dfx // 应该是恢复到最初开始,删除掉刚才构建生成的改变

git checkout -b 1.8 go1.8 // 我当前1.8是go的稳定版

cd src

./all.bash

7.高版本安装成功,将Go相关目录,添加到环境变量中

vim ~/.bashrc // 我在mac上用的 zsh,vim ~/.zshrc

export PATH=$PATH:{$HOME}/go/bin

export GOPATH={$HOME}/go-projects

source ~/.bashrc // source ~/.zshrc

 

 

简介:

大多数用户,不需要从源码安装go,直接下载二进制包安装即可,非常简单。

官方有两个Go编译器工具链。本文档重点介绍 gc Go编译器及其工具。gccgo编译器是一个更传统的的编译器,使用GCC作为后端。

Go编译器支持8个指令集。

 

 

安装二进制Go编译器:

 

Go工具链是用GO写的。要构建它,需要安装一个Go编译器。初始构件工具的脚本,会在 $GOROOT_BOOTSTRAP 环境变量中,查找现有的Go工具链。如果未设置,$GOROOT_BOOTSTRAP 的默认值是 '$HOME/go1.4'。

引导工具链有很多设置选项。获取一个Go工具链后,将 $GOROOT_BOOTSTRAP 设置为我们获取到的Go工具链的解压目录。例如:

最终 $GOROOT_BOOTSTRAP/bin/go 应该是引导工具链的go二进制命令。

我们可以在官方的下载页面,下载一个二进制版本作为Go引导工具链,或者使用其他Go分发版。

 

要从源代码构件Go引导工具链,请使用 git branch release-branch.go1.4或go1.4-bootstrap-20161024.tar.gz,其中包含Go 1.4源代码以及一直以来的修补程序,以保证工具可以运行在较新的操作系统上(Go 1.4是C编写的Go工具链的最后一个分发版)。解压Go 1.4源码包,"cd src/" 子目录,执行 './make.bash'(windows下执行 './make.bat')

 

从源代码交叉编译Go的引导启动链

1.这对于Go 1.4不定位(target-目标、定位)的系统是很有必要的(例如:linux/ppc64le)

2.用于在一台系统上编译在不同系统的go引导启动链

首先,定义环境变量,然后运行 bootstrap.bash

例如,运行如下命令:

$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash

 

bootstrap.bash将依据 'GOOS' 和 'GOARCH',交叉编译Go的工具链,生成到 '../../go-${GOOS}-${GOARCH}-bootstrap',然后我们可以将适用于不同系统的 Go工具链,复制给指定类型的系统,作为 $GOROOT_BOOTSTRAP 的路径,来引导本地构建

 

安装git

一般系统都有,直接yum安装等

 

安装一个C编译器(可选)

要使用cgo来安装Go,允许Go程序导入C库,必须首先安装C编译器(如:gcc或clang)。使用系统上标准的任何安装方法来执行次操作。

不使用cgo来安装Go,在运行 all.bash 或 make.bash 之前,设置环境变量 CGO_ENABLED=0

 

获取go仓库:

git clone git@github.com:golang/go.git

cd go

git checkout go1.8

 

安装Go:

cd src

./all.bash(windows下使用 ./all.bat)

 

安装成功,将会输出:

ALL TESTS PASSED

---

Installed Go for linux/amd64 in /home/you/go.

Installed commands in /home/you/go/bin.

*** You need to add /home/you/go/bin to your $PATH. ***

最后几行的详细信息反映了安装过程中使用的操作系统、体系结构和根目录。

控制构建方式的更多信息,可参阅下方的环境变量说明。all.bash(all.bat)运行Go相关的重要测试,这可能比简单的建构Go需要花费更多时间。如果不想运行测试套件,使用 make.bash(make.bat) 来替代

 

测试安装是否成功:

通过构建一个简单的go程序,来检查Go是否正确安装

$ vim hello.go

package main

import "fmt"

func main() {

fmt.Printf("hello, world\n");

}

运行 hello.go

$ go run hello.go

hello world

 

安装额外工具:

安装所有额外工具:

$ go get golang.org/x/tools/cmd/...

安装指定的一个额外工具:

$ go get golang.org/x/tools/cmd/godoc

注意:

1.go 命令,将会安装 'godoc' 工具到 '$GOROOT/bin'(或者 $GOBIN)

2.cover 和 vet 工具,将被安装到 '$GOROOT/pkg/tool/$GOOS_$GOARCH'。可以使用 'go tool cover' 和 'go tool vet' 来运行 pkg/tool/ 下安装的命令

 

环境变量:

可以通过自定义环境变量来改变Go编译环境。构建时,我们可以不设置环境变量,但有时候,可能希望设置其中的一些,来覆盖默认值。

$GOROOT

Go根目录,通常是 "$HOME/go1.x"。它的值,在编译时被设置,默认时 'all.bash' 的上级目录。不需要设置该环境变量,除非有多个go环境(例如:在我们克隆的代码库中,切换不同的版本)

 

$GOROOT_FINAL

当$GOROOT未显示设置时,该变量值由已安装的二进制包和脚本来假定。默认同$GOROOT值相同。如果在其他地方构建Go目录,在构建后,将go目录移动到指定目录,将 $GOROOT_FINAL 设置为最终的目录

 

$GOOS 和 $GOARCH

操作系统和编译架构的名称。默认同 $GOHOSTOS 和 $GOHOSTARCH 一致。

$GOOS 可以是:

darwin - Mac OS X 10.8+ 以及 iOS

dragonfly

freebsd

linux

netbsd

openbsd

plan9

solaris

windows

$GOARCH 可以是:

amd64 (64-bit x86, the most mature port)

386 (32-bit x86)

arm (32-bit ARM)

arm64 (64-bit ARM)

ppc64le (PowerPC 64-bit, little-endian)

ppc64 (PowerPC 64-bit, big-endian)

mips64le (MIPS 64-bit, little-endian)

and mips64 (MIPS 64-bit, big-endian)

mipsle (MIPS 32-bit, little-endian)

mips (MIPS 32-bit, big-endian)

2者的组合,看文档:

 

 

$GOHOSTOS 和 $GOHOSTARCH

主机操作系统的名称和编译架构。默认是:本地系统的操作系统和架构。可选的组合,在上面已经列出(看文档)。指定的值,不许同本地系统兼容。例如:不应该在 'x86' 系统上,设置 $GOHOSTARCH=arm(2个变量的组合必须是上面支持的之一)

 

$GOBIN

Go二进制软件的安装目录。默认是 $GOROOT/bin。安装完成后,将此目录添加到$PATH环境变量,我们可以直接使用Go相关命令。如果设置了 $GOBIN,go 命令,将会在该目录下,安装所有的命令。(例如:我们通过go安装的额外工具,就会安装到这里)

 

$GO386

仅限于386,如果建立在386或amd64,则默认为自动检测,否则为387。

 

该变量来控制gc生成的代码,是使用 387浮点单元(设置为387),还是SSE2指令(设置为sse2),来进行浮点计算

 

GO386 = 387:使用x87进行浮点运算; 应支持所有x86芯片(Pentium MMX或更高版本)。

GO386 = sse2:使用SSE2进行浮点运算; 具有比387更好的性能,但仅适用于Pentium 4 / Opteron / Athlon 64或更高版本。

 

$GOARM

仅限于arm,如果建立在目标处理器上,默认是自动检测,否则为6

 

这将设置运行时应该定位的ARM浮点协处理器架构版本。 如果要在目标系统上进行编译,其值将自动检测

 

GOARM = 5:使用软件浮点数; 当CPU没有VFP协处理器时

GOARM = 6:仅使用VFPv1; 默认如果交叉编译; 通常是ARM11或更好的内核(也支持VFPv2或更好的内核)

GOARM = 7:使用VFPv3; 通常是Cortex-A核心

 

如果有疑问,请保留此变量未设置,并在首次运行Go可执行文件时根据需要进行调整。 Go社区wiki上的GoARM页面包含有关Go的ARM支持的更多详细信息。

 

/*

非常关键,我们可以随意配置$GOARCH和$GOOS,来编译各平台上的go二进制

*/

注意:

$GOARCH和$GOOS标识目标环境,而非我们机器的运行环境。正因为如此,我们经常使用 "交叉编译"(cross-compiling)。我们可以配置这2个参数,从而编译生成不同平台下的Go二进制,然后复制给其他平台。

 

如果覆盖默认配置,将这些环境变量设置到shell配置($HOME/.bashrc, $HOME/.profile等),配置项如下设置:

export GOROOT=$HOME/go1.X

export GOARCH=amd64

export GOOS=linux

再次声明,在构建、安装和开发Go语言包时,并不一定需要设置这些环境变量


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
343人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

12 人收藏了这篇文章
腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
广告
扫码APP

扫描使用APP

扫码使用

扫描使用小程序