环境变量
6 分钟阅读
Environment variables 环境变量
go
命令中的模块行为可以使用下面列出的环境变量进行配置。这个列表只包括与模块相关的环境变量。有关go
命令识别的所有环境变量的列表,请参阅go help environment。
GO111MODULE
控制go
命令是在模块感知模式还是GOPATH
模式下运行。有三个值可以识别:
off
:go
命令忽略go.mod
文件,并在GOPATH
模式下运行。on
(或unset):go
命令在模块感知模式下运行,即使不存在go.mod
文件。auto
:如果当前目录或任何父目录中存在go.mod
文件,go
命令将以模块感知模式运行。在Go 1.15及以下版本中,这是默认的。
更多信息请参见模块感知命令。
GOMODCACHE
go
命令将存储下载的模块和相关文件的目录。关于此目录结构的详细信息,请参见模块缓存。如果未设置GOMODCACHE
,它默认为$GOPATH/pkg/mod
。
GOINSECURE
以逗号分隔的模块路径前缀 glob 模式列表(采用 Go的 path.Match 的语法),可能总是以不安全的方式获取。仅适用于被直接获取的依赖项。与go get
上的-insecure
标志不同,GOINSECURE
不会禁用模块校验和数据库验证(module checksum database validation)。可以用GOPRIVATE
或GONOSUMDB
来实现这一点。
GONOPROXY
以逗号分隔的模块路径前缀 glob 模式列表(采用Go的path.Match语法),应该总是直接从版本控制存储库获取,而不是从模块代理获取。如果没有设置GONOPROXY
,它默认为GOPRIVATE
。参见Privacy(隐私)。
GONOSUMDB
以逗号分隔的模块路径前缀 glob 模式列表(采用Go的path.Match语法),go
不应使用校验数据库来验证校验。如果未设置 GONOSUMDB
,它默认为 GOPRIVATE
。参见Privacy(隐私)。
GOPATH
在 GOPATH
模式中,GOPATH
变量是一个可能包含 Go 代码的目录列表。在模块感知模式下,module cache(模块缓存)存储在第一个 GOPATH
目录的 pkg/mod
子目录中。缓存之外的模块源代码可以存储在任何目录中。如果未设置GOPATH
,它默认为用户的主目录(home directory)的go
子目录。
GOPRIVATE
以逗号分隔的模块路径前缀的 glob 模式列表(采用Go的path.Match语法),应被视认为是私有的。GOPRIVATE
是GONOPROXY
和GONOSUMDB
的默认值。参见Privacy(隐私)。GOPRIVATE
也决定了一个模块是否被视为 GOVCS
的私有模块。
GOPROXY
模块代理URL的列表,用逗号(,
)或管道符 |
分隔。当go
命令查询有关模块的信息时,它会依次联系列表中的每个代理,直到收到成功的响应或终端错误。代理可能会响应404(Not Found)或410(Gone)状态,表示该模块在该服务器上不可用。
go
命令的错误回退行为(error fallback behavior)是由URL之间的分隔符决定的。如果代理URL后面是逗号,go
命令在404或410错误后会回退到下一个URL;所有其他错误都被视为终端错误。如果代理URL后面跟着管道,则go
命令在出现任何错误(包括超时等非HTTP错误)后回退到下一个源。GOPROXY
URLs可以有https
、http
或file
等协议。如果一个URL没有协议,则假定为https
。模块缓存可以直接作为文件代理使用:
GOPROXY=file://$(go env GOMODCACHE)/cache/download
有两个关键词可以用来代替代理URL:
off
:不允许从任何源下载模块。direct
: 直接从版本控制存储库下载,而不是使用模块代理。
GOPROXY
默认为https://proxy.golang.org,direct
。在该配置下,go
命令首先联系Google运行的Go模块镜像,如果该镜像没有模块,则回退到直接连接。请参见https://proxy.golang.org/privacy了解镜像的隐私政策。可以设置 GOPRIVATE
和 GONOPROXY
环境变量,以防止使用代理下载特定模块。关于隐私代理配置的信息,请参见Privacy(隐私)。
有关如何使用代理的更多信息,请参见Module proxies(模块代理)和Resolving a package to a module(将包解析为模块)。
GOSUMDB
标识要使用的校验和数据库的名称以及可选的公钥和 URL。例如:
GOSUMDB="sum.golang.org"
GOSUMDB="sum.golang.org+<publickey>"
GOSUMDB="sum.golang.org+<publickey> https://sum.golang.org"
go
命令知道sum.golang.org
的公钥,也知道名称为sum.golang.google.cn
(在中国大陆可用)连接到sum.golang.org
数据库;使用任何其他数据库都需要显式地给出公钥。URL默认为https://
后跟数据库名。
GOSUMDB
默认为sum.golang.org
,由Google运行的Go校验和数据库(checksum database)。有关该服务的隐私政策,请参见 https://sum.golang.org/privacy。
如果 GOSUMDB
被设置为off
,或者在调用 go get
时使用了 -insecure
标志,则不会查询校验和数据库,所有未识别的模块都会被接受,代价是放弃对所有模块进行验证的可重复下载的安全保证。绕过特定模块的校验和数据库的更好方法是使用GOPRIVATE
或GONOSUMDB
环境变量。
更多信息请参见Authenticating modules(验证模块)和Privacy(隐私)。
GOVCS
控制go
命令在下载公共和私有模块(由其路径是否匹配GOPRIVATE
中的模式来定义)或其他与glob模式相匹配的模块时可以使用的版本控制工具集。如果没有设置GOVCS
,或者某个模块不符合GOVCS
中的任何模式,go
命令可以对公共模块使用git
和hg
,对私有模块使用任何已知的版本控制工具。具体来说,go
命令的行为就像GOVCS
被设置为public:git|hg,private:all
,完整的解释请参见 用GOVCS
控制版本控制工具。
GOWORK
GOWORK
环境变量指示go
命令使用提供的go.work
文件进入工作区模式。如果GOWORK
被设置为off
,工作区模式将被禁用。这可以用来在单模块模式下运行go
命令:例如,GOWORK=off go build .
在单模块模式下构建.
包。如果GOWORK
为空,go
命令将搜索go.work
文件,如工作区部分所述。