简体   繁体   中英

Where are the golang environment variables stored?

I am just started learning golang on Windows 7.

With go env , I got this:

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

Then I checked with echo %envVar% in the command line, I found env vars like:

GOPATH
GOROOT

But others are not found.

So where are they stored? Some hidden configuration file?

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

Please type the following command to your command prompt

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

by default, env_file does not exist on mac_os.

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

after doing " go env -w $HOME/go ", the env_file was created.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM