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?
Machine environment variables are stored or retrieved from the following registry location: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment . Process environment variables are generated dynamically every time a user logs in to the device and are restricted to a single process.
Get environment variable value with os. Getenv(). This method returns the value of the variable if the variable is present else it returns an empty value.
Environment variables are key-value pair on a system-wide level, and running processes can access that. These are often used to make the same program behave differently in different deployment environments like PROD, DEV, or TEST. Storing configuration in the environment is one of the principles of a twelve-factor app.
A Go (golang) port of the Ruby dotenv project (which loads env vars from a .env file) From the original Library: Storing configuration in the environment is one of the tenets of a twelve-factor app.
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
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.
Please type the following command to your command prompt
> go env GOENV
/root/.config/go/env
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With