Where are the golang environment variables stored?

Those are just the defaults for your platform. Think of them as stored in the go.exe executable itself.

You can override them by setting them to something else like any other env var.


Like what @David Budworth says, those variables are the defaults for your platform.

Most of case we change $GOPATH and $GOROOT variables. For example in my PC i use export GOPATH=/home/user/go and yours may be different from mine.

Otherwise, if you look to find where other variables are stored you need to look at /usr/lib/go-1.6/src (sorry i'm using Ubuntu right now with go 1.6 and i don't know the path directory of go in Windows), you'll find there many bash scripts used when you built your go executable.

For example:

in the file: make.bash you'll see: $GROOT was declared there and used to build the final go executable:

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

I saw, also, your comments about GOTOOLDIR and how it knows your installation location of go in your box. I would say, that the source code of go have the answer and you can find it here:

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

Edit: I found this good article about building go: How GO uses to build itself

PS: Sorry for my english. I'm not a native english speaker.


In go1.13, customized GOENVs are stored in GOENV, which is specified by system environment variable. If not specified, the default value for your platform will be used.

To obtain default location for your platform, use go env GOENV: on Linux you'll get $HOME/.config/go/env, and on macOS you'll get $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

environment variables defined with form "KEY=VALUE" in this file will override the default value hard coded at https://github.com/golang/go/blob/57662b1575030aa09043cd7a48425abdc6e0e0a3/src/cmd/go/internal/cfg/cfg.go#L229

Tags:

Go