教程 > Go 教程 > Go 扩展阅读 阅读:1347

go语言:环境变量GOPROXY和GO111MODULE设置

在文章Go 语言环境在windows、linux和 mac 上的安装 中,我们介绍了 golang的安装及环境变量的设置。GOROOT和GOPATH需要在windows中操作。当我们安装完golang后,我们在windows的cmd命令下就可以直接查看和使用go命令和环境变量了,同样的在linux/Mac下可以在控制台使用。我们可以使用以下命令查看环境变量

$ go env

go env 环境变量

我们也可以直接输入 go, 查看go支持的命令

$ go
Go is a tool for managing Go source code.

Usage:

    go <command> [arguments]

The commands are:

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         add dependencies to current module and install them
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

GOPROXY

从字面意思就能看出,GOPROXY表示的是go的代理设置,之所以有这个环境变量,是因为go这种语言不像C语言,在C语言中,如果我们想要使用别人的第三方代码,一般有两种途径:

  1. 将第三方代码源码合并到自己的工程文件中,再合并编译。
  2. 将第三方代码编译生成的共享库*.so或*.dll 文件放到工程目录下,然后通过条件编译来使用。

而在 go 语言中,类似于java,可以在编程时,引入第三方代码的库地址,比如git仓库,然后在编译的时候,IDE会自动的拉取第三方库文件到当前工程。 这样做虽然很方便,但是带来了一个问题:网速和限制,因为一些第三方代码库是在国外服务器上的,因为一些限制,我们不能很顺利的使用和下载这些仓库,这样就会导致下载缓慢或者失败,所以这个时候就需要一个 代理来实现下载,这个代理就是中间商,可以跨过限制来访问。 golang默认的GOPROXY是 https://goproxy.io ,这个是官方的设置,我们可以使用国内的代理,Windows下设置如下: 打开终端并执行

$ go env -w GOPROXY=https://goproxy.cn,direct

其中 -w 表示 写 操作。


GO111MODULE

GO111MODULE 是 go modules 功能的开关,关于go modules本文不详述,这个涉及到go的一种很重要的管理机制,我们可以简单的理解为,在没有go modules机制时,go工程中对于第三方功能包的管理非常复杂,也非常专业,这就导致程序员在进行开发的时候,对于第三方功能包的管理很不方便,所以才有了go modules机制。这个机制的开关是通过GO111MODULE环境变量来配置的。

  • GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
  • GO111MODULE=on,模块支持,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
  • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
    1. 当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
    2. 当前文件在包含go.mod文件的目录下面。

在使用go modules时,GOPATH是无意义的,不过它还是会把下载的依赖存储在$GOPATH/pkg/mod 中,也会把go install 的结果放在 $GOPATH/bin 中。

当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的module。

命令设置如下:

$ go env -w GO111MODULE=on

当然我们也可以关闭 go 的 module功能,执行如下命令即可关闭

$ go env -w GO111MODULE=off

go 关闭 go-mod 功能

通过上图我们可以看到此时的GO111MODULE的值为 off,表示已经关闭了。

查看笔记

扫码一下
查看教程更方便