go中环境变量—你应该知道的一切

2023-08-14  本文已影响0人  护念

作为一名golang开发者,有必要对go中的环境变量进行了解。

在go 1.11以前,是需要我们手动去配置环境变量,而且只能在GOPATH目录下进行项目开发,由于对新手相当不友好。

在go 1.11之后,go官方采用了一种友好的方式 go mod,对于初学者不必去手动配置环境变量,go 把这一切做了屏蔽,底层这些环境变量仍然存在,只是go帮我打理好了这一切。

PS: 如果你在某些教程上仍然看到,要求你在GOPATH下创建项目,大可不必,要知道哪是对于未使用go模块的项目

在正式开始前,我们先来看一眼go中的环境变量,使用命令go env即可查,如果只想单独查看某一个环境变量,可以使用go env XX变量,比如go env GOPATH,查看GOPATH

dongmingyan@pro ⮀ ~ ⮀ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/dongmingyan/Library/Caches/go-build"
GOENV="/Users/dongmingyan/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/dongmingyan/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/dongmingyan/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.20.5"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/j8/08btplt912l0m3jg760nkbpw0000gn/T/go-build1155094407=/tmp/go-build -gno-record-gcc-switches -fno-common"

这里环境变量非常多,我们挑重点的介绍,一般来讲,我常使用的也就那么几个。

PS:

这里的环境变量区别于我们系统的环境变量,如果直接使用echo $GOPATH 我们是看不到值的,也是就是需要我们把这些变量写入系统的初始化里面才能有值

GOROOT

特别说明: 由于我是mac电脑,所以我这里也是根据mac电脑阐明路径,window系统只是路径不同,其功能一样。

在mac上路径是:GOROOT="/usr/local/go"
这里存放的go sdk(软件开发工具包),包括编译、执行命令(比如go)、和go自身的库。

GOPATH

这里区别于go 自身sdk,这里放的是一些基于go语言开发的一些东西(包、命令、项目源代码)

这里主要有三个目录:

GOPROXY

image.png

早期的时候我们要拉取包,直接能直接去项目仓库拉取,但是这样做不够稳定和安全,于是诞生了GOPROXY,用于集中管理包的下载。

默认情况下,这里的值是
GOPROXY="https://proxy.golang.org,direct"

如果是国内为了方便拉取,最好修改成国内的竞相地址,可以使用
go env -w GOPROXY=https://goproxy.cn,direct这个命令用于修改环境变量的值。

GOBIN

用于设置go install/build 可执行文件存放位置,默认情况下,这个值是空的;此时可执行文件会存放在$GOPATH/bin

GO111MODULE

看到这里的111你就应该知道这个指的是go的版本号1.11,从这里开始就有了go模块,如果是这个版本之后的默认情况下这个是开启的值为on;如果是比较古老的go版本,想要使用模块,需要手动开启。

Go mod(模块)

有两个最常用的命令

go init example/play # 初始化模块
go mod tidy          # 更新当前项目的依赖

有两个文件

Go mod vendor

这个不是环境变量,这个是在某些时候,我们担心一些包可能以后下载不了,我们可以使用go mod vendor 这会在你项目的层级创建一个vendorGo mod vendor,在这个目录下,存放此项目相关的依赖包源文件都会放到这个目录。

GOPRIVATE

这个是用于我们私自开发的一些包,没有公开,这些包只属于我们个人/公司,我们使用的时候,希望这些包不要去默认的GOPROXY中拉取,而是到指定的地方中拉取的情况。

比如:

GOPRIVATE=*github.com/org_name

凡是包路径符合这个路径的包,都不会去GOPROXY中获取。

上一篇下一篇

猜你喜欢

热点阅读