Jump to content

# Go (Español)

4 languages

- English
- 日本語
- Русский
- 中文（简体）

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.

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

Category:

- Programming languages (Español)