【问题标题】:Where are the golang environment variables stored?golang环境变量存储在哪里?
【发布时间】:2016-11-27 03:56:32
【问题描述】:

我刚开始在 Windows 7 上学习 golang。

有了go env,我得到了这个:

set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=E:\Workbench\Go
set GORACE=
set GOROOT=C:\DevTools\Go
set GOTOOLDIR=C:\DevTools\Go\pkg\tool\windows_amd64
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
set CXX=g++
set CGO_ENABLED=1

然后我在命令行中检查echo %envVar%,我发现环境变量如下:

GOPATH
GOROOT

但是没有找到其他的。

那么它们存储在哪里?一些隐藏的配置文件?

【问题讨论】:

  • 阅读go help envgo help environment

标签: go


【解决方案1】:

这些只是您平台的默认设置。将它们视为存储在 go.exe 可执行文件本身中。

您可以通过将它们设置为与任何其他环境变量类似的其他值来覆盖它们。

【讨论】:

  • 但是对于GOTOOLDIR,如果是在go.exe中,怎么知道go在我的盒子上的安装位置呢?或者它从GOROOT推断它?
  • set 部分给我的印象是它正在将这些变量添加到我的环境中。
  • 我假设 go 工具正在调用 win32 api 以获取它自己的位置,然后从那里计算默认路径。在此处查看该 api 的示例:stackoverflow.com/questions/2647429/…
  • 对于“设置”,go env 打印适合在主机平台上设置的环境。即:在mac上(通过自制软件),它打印GOTOOLDIR="/usr/local/Cellar/go/1.7.3/libexec/pkg/tool/darwin_amd64"
【解决方案2】:

在 go1.13 中,自定义的 GOENV 存储在 GOENV 中,由系统环境变量指定。如果未指定,将使用您平台的默认值。

要获取您平台的默认位置,请使用 go env GOENV:在 Linux 上您将获得 $HOME/.config/go/env,在 macOS 上您将获得 $HOME/Library/Application Support/go/env

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/home/leonardo/go/bin"
GOCACHE="/home/leonardo/.cache/go-build"
GOENV="/home/leonardo/.config/go/env" # if system environment 'GOENV' is empty, the default value for your platform will be used.
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/leonardo/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct" # default value is "https://proxy.golang.org,direc"
$ cat ~/.config/go/env
GOPROXY=https://goproxy.cn,direct

在此文件中以“KEY=VALUE”形式定义的环境变量将覆盖在https://github.com/golang/go/blob/57662b1575030aa09043cd7a48425abdc6e0e0a3/src/cmd/go/internal/cfg/cfg.go#L229 硬编码的默认值

【讨论】:

    【解决方案3】:

    就像@David Budworth 所说,这些变量是您平台的默认值。

    大多数情况下,我们会更改 $GOPATH$GOROOT 变量。例如,在我的电脑中,我使用export GOPATH=/home/user/go,而你的可能与我的不同。

    否则,如果您要查找其他变量的存储位置,则需要查看 /usr/lib/go-1.6/src(抱歉,我现在正在使用 Ubuntu 和 go 1.6,我不知道 go 在 Windows 中的路径目录),您会发现在构建 go executable 时使用了许多 bash scripts

    例如:

    在文件中:make.bash 你会看到:$GROOT 在那里声明并用于构建最终的go executable

    export GOROOT="$(cd .. && pwd)"
    

    我还看到您的 cmets 关于 GOTOOLDIR 以及它如何知道您在盒子中的安装位置。我会说,go的源代码有答案,你可以找到它here

    // ToolDir is the directory containing build tools.
    var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
    

    编辑: 我发现这篇关于构建 go 的好文章:How GO uses to build itself

    PS:对不起我的英语。我不是以英语为母语的人。

    【讨论】:

    • 我假设你并没有真正做到:export GOPATH=/home/user/go/src,而是做到:export GOPATH=/home/user/go,否则你会得到 $HOME/go/src/src/STUFF 你去获取
    • 是的,这是一个错误,你是对的。正确的路径是export GOPATH=$HOME/goexport GOPATH=/user_path/go。我将编辑我的答案。
    【解决方案4】:

    请在命令提示符下输入以下命令

    > go env GOENV
    /root/.config/go/env
    

    【讨论】:

      【解决方案5】:

      默认情况下,env_file 在 mac_os 上不存在。

      env_file: $HOME/Library/Application Support/go/env
      

      执行“go env -w $HOME/go”后,env_file 被创建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        相关资源
        最近更新 更多