Go (Español)

From ArchWiki
Esta traducción de Go fue revisada el 2021-02-09. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Go es un lenguaje de tipado estático con una sintaxis ligeramente derivada de la de C, añadiendo gestión de memoria con recolector de basura, seguridad de tipado, algunas capacidades de tipado dinámico, tipados adicionales incorporados como arrays de longitud variable y mapas clave-valor, y una gran librería estándar.

Instalación

El compilador estándar de Go es go, el cual se puede instalar desde el paquete go. La orden go también incluye varias herramientas como go get, go doc, etc. Una alternativa es gcc-go, que se trata de un frontend de Go para la colección de compiladores GNU (GCC). En algunos casos gccgo puede realizar mejores optimizaciones. En caso de duda, utilice go.

Un paquete adicional que la mayoría de los desarrolladores de Go querrán instalar es go-tools. Esto proporciona varias herramientas de uso común que facilitarán el trabajo con Go, como goimports, guru, gorename, etc.

Probar la instalación

Puede comprobar que Go se ha instalado correctamente compilando un programa relativamente sencillo, como el que se muestra a continuación:

hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hola, Arch!")
}

Posteriormente, ejecútelo con la herramiento go:

$ go run hello.go
Hola, Arch!

Compilación con el compilador estándar gc (lo mismo que go build -compiler=gc hello.go):

$ go build hello.go

Compilación con gccgo (lo mismo que go build -compiler=gccgo hello.go):

$ gccgo hello.go -o hello

$GOPATH

Go espera que el código fuente se halle dentro de $GOPATH, el cual se establece por defecto en ~/go.

Sugerencia: Puede conocer todas las variables de Go ejecutando go env

Cree el espacio de trabajo:

$ mkdir -p ~/go/src

El directorio ~/go/src se utiliza para almacenar las fuentes de los paquetes. Al compilar, Go también creará bin para los ejecutables y pkg para almacenar los paquetes individuales. Probablemente quiera añadir ~/go/bin a la variable de entorno $PATH para ejecutar Go:

export PATH="$PATH:$HOME/go/bin"

Ejecute la orden go help gopath para obtener más información.

Sugerencia: $GOPATH funciona como $PATH y puede contener múltiples entradas, esto puede ser útil para dividir los paquetes descargados con go get y su propio código fuente; por ejemplo, GOPATH=$HOME/go:$HOME/mygo

Compilación cruzada a otras plataformas

La orden go puede compilar de forma nativa a un número de plataformas.

Si cgo no es necesario para la compilación, entonces simplemente especifique el sistema operativo de destino y la arquitectura como variables de entorno a go build:

$ GOOS=linux GOARCH=arm64 go build .

Véase la documentación oficial para las posibles combinaciones de $GOOS y $GOARCH.

Por otro lado, si se requiere de cgo para la compilación, se tiene que proporcionar la ruta a sus compiladores cruzados C/C++, a través de las variables de entorno $CC/$CXX.

Supongamos que desea compilar para $GOOS=linux y $GOARCH=arm64.

Primero necesita instalar el compilador cruzado aarch64-linux-gnu-gcc.

He aquí hay un programa de ejemplo que requiere cgo, para que podamos probar el proceso de compilación cruzada:

$ cat > hello.go <<EOF
package main

// #include <stdio.h>
// void hello() {  puts("Hola, Arch!"); }
import "C"

func main() { C.hello() }
EOF

Después, puede realizar compilación cruzada así:

$ GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=/usr/bin/aarch64-linux-gnu-gcc go build hello.go

Puede comprobar que la arquitectura del binario generado es realmente aarch64:

$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=b1d92ae8840a019f36cc2aee4606b6ae4a581bf1, for GNU/Linux 3.7.0, not stripped

Si copia hello a un host adecuado, puede probar a ejecutarlo:

[alarm@rpi3 ~]$ uname -a
Linux alarm 5.3.8-1-ARCH #1 SMP Tue Oct 29 19:31:23 MDT 2019 aarch64 GNU/Linux
[alarm@arpi3 ~]$ ./hello
Hola, Arch!

Solución de problemas

Plugin Go Jetbrains

Si está usando un IDE Jetbrains y el plugin Go no puede encontrar su ruta de Go SDK, puede que esté usando un paquete incompatible. Elimine el paquete gcc-go y reemplácelo por go. Si su $GOPATH está configurado, el IDE debería entonces ser capaz de encontrar su Go SDK en /usr/lib/go.

Véase también