美文网首页
go中环境变量—你应该知道的一切

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

作者: 护念 | 来源:发表于2023-08-14 22:35 被阅读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语言开发的一些东西(包、命令、项目源代码)

    这里主要有三个目录:

    • pkg
      如果使用了模块在pkg/mod存放一些我们go install/get或者 go mod tidy下来的包,我们称之为模块缓存,如果想清理这些模块缓存使用go clean -modcache
    • bin
      这里存放的是,我们安装包带的命令会在这里比如air/godoc
    • src
      在使用go模块后,这里路径就弱化了,在使用模块以前,我们开发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
      这个是依赖定义文件,用于锁定项目需要用到包的版本,相当于ruby语言中的gemfile.lock
    • go.sum
      一个包校验文件,一个包下载后来进行hash校验,保证安全性

    Go mod vendor

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

    GOPRIVATE

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

    比如:

    GOPRIVATE=*github.com/org_name
    

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

    相关文章

      网友评论

          本文标题:go中环境变量—你应该知道的一切

          本文链接:https://www.haomeiwen.com/subject/edgcmdtx.html