Go (Español)

Esta traducción de
Go
fue revisada el
2021-02-09
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Go package guidelines
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
Página web oficial
Artículo de Wikipedia
Ejemplos con pequeñas descripciones
Tour interactivo de formación en Go
Compilación cruzada de Go
IDEs y Plugins para Go