Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

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 operativo
  • GOARCH:- arquitectura

Menos frecuentemente utilizadas:

  • GOPROXY y GOSUMDB: 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 y GOMODCACHE: Útiles en configuraciones avanzadas de desarrollo.
Esta seccion la estoy haciendo para consumo personal, pero como puede que sea de ayuda para otras personas la he puesto online. En esta seccion vera como obtener las variables de entorno predefinidas una por una pero sepa que tambien puede obtenerlas de la siguiente manera go env

Puedes hacer uso de go env -w para definir las variables de forma permanente, esta manera es cross-plataform

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 Terminal
go env GOROOT

Deinir GOROOT en Windows

Esta puede ser seteada o definida en Windows de forma temporal con:

CMD o Terminal
set GOROOT=C:\path\to\your\goroot

También puede ser seteada de forma permanente con:

CMD o Terminal
setx 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 Terminal
export 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 Terminal
source .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 Terminal
go env GOPATH

Definir GOPATH en Windows

Definirá la variable GOPATH de forma Temporal

CMD o Terminal
set GOPATH=C:\path\to\your\gopath

Definirá la variable GOPATH de forma Permanente

CMD o Terminal
setx GOPATH=C:\path\to\your\gopath

Definir GOPATH en Linux

Temporal

CMD o Terminal
export GOPATH=C:\path\to\your\gopath

Permanente

.bashrc or .zshrc
#add the following line
export GOPATH=C:\path\to\your\gopath
CMD 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 Terminal
go env CGO_ENABLED

Definir CGO_ENABLED en Windows

Temporal

CMD o Terminal
set CGO_ENABLED=1

Permanente

CMD o Terminal
setx CGO_ENABLED=1

Definir CGO_ENABLED en Linux

Temporal

CMD o Terminal
export CGO_ENABLED=1

Permanente

.bashrc
# add this line to your bashrc
export CGO_ENABLED=1
CMD 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.

Puedes ver una explicacion mas completa de GO111Module en https://rambabuy.medium.com/understanding-go-go111module-16917777053c
CMD o Terminal
go env GO111MODULE

Definir GO111MODULE en Windows

Temporal

CMD o Terminal
set GO111MODULE=on

Permanente

CMD o Terminal
setx GO111MODULE "on"

Definir GO111MODULE en Linux

Temporal

CMD o Terminal
export 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

CMD o Terminal
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 Terminal
go 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 Terminal
go 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 Terminal
go 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 Terminal
go 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 Terminal
go env GOPROXY
Category: go
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category