Golang环境变量设置详解

原创做者,公众号【程序员读书】,欢迎关注公众号,转载文章请注明出处哦。linux

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

但对于一些初学者来讲,可能不太明白Go语言中经常使用的环境变量(Environment variables)的做用以及如何设置环境变量,今天咱们来说讲。git

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

经常使用环境变量

Go语言中能够设置的环境变量有不少,每一个环境变量都有其做用,不过不少咱们可能都用不到,通常须要了解也是最重要的有如下几个:github

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

GOROOT

环境变量GOROOT表示Go语言的安装目录。golang

Windows中,GOROOT的默认值是C:/go,而在Mac OSLinuxGOROOT的默认值是usr/loca/go,若是将Go安装在其余目录中,而须要将GOROOT的值修改成对应的目录。shell

另外,GOROOT/bin则包含Go为咱们提供的工具链,所以,应该将GOROOT/bin配置到环境变量PATH中,方便咱们在全局中使用Go工具链。编程

Linux设置GOROOT演示
export GOROOT=~/go
export PATH=$PATH:$GOROOT/bin
复制代码

GOPATH

注意,GOPATH的值不能与GOROOT相同。windows

环境变量GOPATH用于指定咱们的开发工做区(workspace),是存放源代码、测试文件、库静态文件、可执行文件的工做。bash

类Unix(Mac OS或Linux)操做系统中GOPATH的默认值是$home/go。而在Windows中GOPATH的默认值则为%USERPROFILE%\go(好比在Admin用户,其值为C:\Users\Admin\go)。

固然,咱们能够经过修改GOPATH来更换工做区,好比将工做设置opt/go方式以下:

Linux设置GOPATH演示
export GOPATH=/opt/go
复制代码

还有,能够在GOPATH中设置多个工做区,如:

export GOPATH=/opt/go;$home/go
复制代码
GOPATH的子目录

上面的代码表示咱们指定两个工做区,不过当咱们使用go get命令去获取远程库的时候,通常会安装到第一个工做区当中。

按照Go开发规范,GOPATH目录下的每一个工做通常分为三个子目录:src,pkg,bin,因此咱们看到的每一个工做区是这样子的:

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目录放的是咱们开发的源代码文件,其下面对应的目录称为,pkg放的是编译后的库静态文件,bin放的是源代码编译后台的可执行文件。

GOBIN

环境变量GOBIN表示咱们开发程序编译后二进制命令的安装目录。

当咱们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,通常咱们将GOBIN设置为GOPATH/bin目录。

Linux设置GOBIN演示
export GOBIN=$GOPATH/bin
复制代码

上面的代码中,咱们都是使用export命令设置环境变量的,这样设置只能在当前shell中有效,若是想一直有效,如在Linux中,则应该将环境变量添加到/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命令获取当前GOOS和GOARCH的值。

$ 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
复制代码

小结

环境变量的设置,能够影响咱们开发和编译项目的过程与结果,因此仍是颇有必要了解一下的。


你的关注,是我写做路上最大的鼓励!

相关文章
相关标签/搜索