Variables de entorno predefinidas frecuentemente utilizadas en Go
Go tiene algunas variables de entorno predefinidas que son frecuentemente utilizadas y tenemos que tener en cuenta, ya que nos servirán en nuestros proyectos, por ejemplo GOOS nos dará el sistema operativo donde estamos.
Más utilizadas
GOROOT
: – Ubicación del SDK de Go (fijo).GOPATH
: – Directorio raíz de su espacio de trabajo de Go (personalizable).CGO_ENABLED
: – Controla la integración de Go con el código C (1 para habilitar, 0 para deshabilitar).GO111MODULE
: – Controla el modo de uso de módulos Go (auto, on, off).GOOS
: – sistema operativoGOARCH
:- arquitectura
Menos frecuentemente utilizadas:
GOPROXY
yGOSUMDB
: Importantes para la gestión de dependencias en redes restringidas y para garantizar la integridad de los módulos.GOCACHE
: Beneficioso para mejorar los tiempos de compilación en proyectos grandes.GOTMPDIR
yGOMODCACHE
: Útiles en configuraciones avanzadas de desarrollo.
A continuación veremos estas variables de una forma más profunda.
GOROOT
Ubicación de donde está Go instalado, está se setea por defecto a menos que utilices una distribución binaria
Puedes saber el valor de GOROOT en todo momento con el siguiente comando
CMD o Terminalgo env GOROOT
Deinir GOROOT en Windows
Esta puede ser seteada o definida en Windows de forma temporal con:
CMD o Terminalset GOROOT=C:\path\to\your\goroot
También puede ser seteada de forma permanente con:
CMD o Terminalsetx GOROOT=C:\path\to\your\goroot
Definir GOROOT en Linux
Podemos definir a GOROOT en Linux de forma temporal de la siguiente manera:
CMD o Terminalexport GOROOT=C:\path\to\your\goroot
También podemos definir GOROOT de forma permanente en nuestro archivo .bashrc o .zshrc agregando la línea de export.
.bashrc or .zshrc#add the following line export GOROOT=C:\path\to\your\goroot
Deberás de cargar nuevamente el archivo .bashrc o el .zshrc como fuente.
CMD o Terminalsource .bashrc
GOPATH (en des-uso)
Directorio raíz de su espacio de trabajo de Go, actualmente ha sido remplazado por los modulos, pero puede que lo necesites.
Se puede obtener el valor de GOPATH con el siguiente comando
CMD o Terminalgo env GOPATH
Definir GOPATH en Windows
Definirá la variable GOPATH de forma Temporal
CMD o Terminalset GOPATH=C:\path\to\your\gopath
Definirá la variable GOPATH de forma Permanente
CMD o Terminalsetx GOPATH=C:\path\to\your\gopath
Definir GOPATH en Linux
Temporal
CMD o Terminalexport GOPATH=C:\path\to\your\gopath
Permanente
.bashrc or .zshrc#add the following line export GOPATH=C:\path\to\your\gopathCMD o Terminal
source .bashrc
CGO_ENABLED
Controla la integración de Go con el código C. Si lo quieres ver de otra manera esta variable hablita la utilización de código C en Go
Esta puede tener 2 valores 1 o 0, para poder utilizar C esta debe tener valor 1, lo recomendable es que lo tengas en 1 de forma permanente(default)
CMD o Terminalgo env CGO_ENABLED
Definir CGO_ENABLED en Windows
Temporal
CMD o Terminalset CGO_ENABLED=1
Permanente
CMD o Terminalsetx CGO_ENABLED=1
Definir CGO_ENABLED en Linux
Temporal
CMD o Terminalexport CGO_ENABLED=1
Permanente
.bashrc# add this line to your bashrc export CGO_ENABLED=1CMD o Terminal
source .bashrc
GO111MODULE
GO111MODULE
nos indicaba si los módulos están activados o no en caso de que no, Go utilizará el GOPATH
. La variable GO111MODULE
tiene 3 posibles valores siendo estos: on
, off
y auto
.
En caso de tener auto se chequeará de si existe un archivo go.mod, en caso de no tenerlo se utilizará GOPATH.
go env GO111MODULE
Definir GO111MODULE en Windows
Temporal
CMD o Terminalset GO111MODULE=on
Permanente
CMD o Terminalsetx GO111MODULE "on"
Definir GO111MODULE en Linux
Temporal
CMD o Terminalexport GO111MODULE=on
Para poder hacer el cambio permanente deberás agregar el export a tú .bashrc
.bashrc# add this line to your bashrc export GO111MODULE="on"CMD o Terminal
source .bashrc
GOOS and GOARCH
Puedes en todo momento chequear tu arquitectura con GOARCH
y tu OS con GOOS
obviamente este no es un valor que puedas cambiar
go env GOOS go env GOARCH
puedes detectar el OS dé el usuario que esté usando tu programa con runtime.
if runtime.GOOS == "windows" { fmt.Println("Estas usando windows") }
GOCACHE
El comando cache de Go crea outputs para el re-uso en futuros builds, Go por defecto usa una sub-carpeta llamada go-build en la carpeta de caché del usuario del sistema(OS).
La variable GOCACHE nos permite especificar otro lugar para esta data.
CMD o Terminalgo env GOCACHE
GOMODCACHE
la variable GOMODCACHE especifica donde se guardara el caché de los módulos, la ruta por defecto es $GOPATH/pkg/mod
CMD o Terminalgo env GOMODCACHE
GOTMPDIR
Si la variable GOTMPDIR
está definida, se crearán los archivos temporales en dicho directorio.
En caso contrario se crearán en los archivos temporales del OS.
CMD o Terminalgo env GOTMPDIR
GOSUMDB
La variable de entorno GOSUMDB
en Go se utiliza para especificar la base de datos de sumas de verificación que la herramienta de Go debe usar para verificar la integridad de los módulos.
Esta chequeará los checksum de los módulos que aún no están listados en go.sum
Puede haber ocasiones en que no se pueda alcanzar el Proxy y el checksum, en este caso se recomienda deshabilitarlo usando la siguiente config
go env -w GOPROXY=direct go env -w GOSUMDB=off
Puedes ver el path de GOSUMDB con:
CMD o Terminalgo env GOSUMDB
GOPROXY
En general esta es una variable que no deberíamos cambiar, salvo en algunos casos que así lo necesitemos.
Default value: https://proxy.golang.org,direct
CMD o Terminalgo env GOPROXY
go env
Puedes hacer uso de
go env -w
para definir las variables de forma permanente, esta manera es cross-plataform