Golang环境变量设置详解

无论你是使用Windows,Linux还是Mac OS操作系统来开发Go应用程序,在安装好Go安装语言开发工具之后,都必须配置好Go语言开发所要求的 环境变量,才算初步完成Go开发环境的搭建。

环境变量(Environment variables)

注意:Go提供的Windows操作系统安装包(.msi后缀)安装完成后,会自动配置几个常用的环境变量。

常用环境变量

Go语言中可以设置的环境变量有很多,每个环境变量都有其作用,不过很多我们可能都用不到,一般需要了解也是最重要的有以下几个:

$ go env //打印Go所有默认环境变量
$ go env GOPATH //打印某个环境变量的值
复制代码

GOROOT

GOROOT
WindowsGOROOTC:/goMac OSLinuxGOROOTusr/loca/go
GOROOT/binGOROOT/bin

Linux设置GOROOT演示

export GOROOT=~/go
export PATH=$PATH:$GOROOT/bin
复制代码

GOPATH

GOPATHGOROOT
GOPATH
类UnixGOPATH
opt/go

Linux设置GOPATH演示

export GOPATH=/opt/go
复制代码

还有,可以在GOPATH中设置多个工作区,如:

export GOPATH=/opt/go;$home/go
复制代码

GOPATH的子目录

go get
srcpkgbin
bin/
    hello                      # 可执行文件
    outyet                     # 可执行文件
src/
    github.com/golang/example/
        .git/                 
    hello/
        hello.go               # 命令行代码
    outyet/
        main.go                # 命令行代码
        main_test.go           # 测试代码
    stringutil/
        reverse.go             # 库文件
        reverse_test.go        # 库文件
    golang.org/x/image/
        .git/                  
    bmp/
        reader.go              # 库文件
        writer.go              # 库文件
复制代码
src包pkgbin

GOBIN

GOBIN
go installGOPATH/bin

Linux设置GOBIN演示

export GOBIN=$GOPATH/bin
复制代码
/etc/profile

交叉编译

什么是交叉编译?所谓的交叉编译,是指在一个平台上就能生成可以在另一个平台运行的代码,例如,我们可以32位的Windows操作系统开发环境上,生成可以在64位Linux操作系统上运行的二进制程序。

在其他编程语言中进行交叉编译可能要借助第三方工具,但在Go语言进行交叉编译非常简单,最简单只需要设置GOOS和GOARCH这两个环境变量就可以了。

GOOS与GOARCH

GOOS的默认值是我们当前的操作系统, 如果windows,linux,注意mac os操作的上的值是darwin。 GOARCH则表示CPU架构,如386,amd64,arm等。

获取GOOS和GOARCH的值

go env
$ go env GOOS GOARCH
复制代码

GOOS和GOARCH的取值范围

GOOS和GOARCH的值成对出现,而且只能是下面列表对应的值。

$GOOS	    $GOARCH
android	    arm
darwin	    386
darwin	    amd64
darwin	    arm
darwin	    arm64
dragonfly   amd64
freebsd	    386
freebsd	    amd64
freebsd	    arm
linux	    386
linux	    amd64
linux	    arm
linux	    arm64
linux	    ppc64
linux	    ppc64le
linux	    mips
linux	    mipsle
linux	    mips64
linux	    mips64le
linux	    s390x
netbsd	    386
netbsd	    amd64
netbsd	    arm
openbsd	    386
openbsd	    amd64
openbsd	    arm
plan9	    386
plan9	    amd64
solaris	    amd64
windows	    386
windows	    amd64
复制代码

示例

编译在64位Linux操作系统上运行的目标程序

$ GOOS=linux GOARCH=amd64 go build main.go
复制代码

编译arm架构Android操作上的目标程序

$ GOOS=android GOARCH=arm GOARM=7 go build main.go
复制代码

环境变量列表

虽然我们一般虽然配置的环境变量就那么几个,但其实Go语言是提供了非常多的环境变量,让我们可以自由地定制开发和编译器行为。

下面是Go提供的所有的环境变量列表,一般可以划分为下面几大类,大概了解一下就可以了,因为有些环境变量我们可以永远都不会用到。

通过环境变量

GCCGO
GOARCH
GOBIN
GOCACHE
GOFLAGS
GOOS
GOPATH
GOPROXY
GORACE
GOROOT
GOTMPDIR
复制代码

和cgo一起使用的环境变量

CC
CGO_ENABLED
CGO_CFLAGS
CGO_CFLAGS_ALLOW
CGO_CFLAGS_DISALLOW
CGO_CPPFLAGS, CGO_CPPFLAGS_ALLOW, CGO_CPPFLAGS_DISALLOW
CGO_CXXFLAGS, CGO_CXXFLAGS_ALLOW, CGO_CXXFLAGS_DISALLOW
CGO_FFLAGS, CGO_FFLAGS_ALLOW, CGO_FFLAGS_DISALLOW
CGO_LDFLAGS, CGO_LDFLAGS_ALLOW, CGO_LDFLAGS_DISALLOW
CXX
PKG_CONFIG
AR
复制代码

与系统架构体系相关的环境变量

GOARM
GO386
GOMIPS
GOMIPS64
复制代码

专用的环境变量

GCCGOTOOLDIR
GOROOT_FINAL
GO_EXTLINK_ENABLED
GIT_ALLOW_PROTOCOL
复制代码

其他环境变量

GOEXE
GOHOSTARCH
GOHOSTOS
GOMOD
GOTOOLDIR