Introducción a Go

¿Qué es Go?

Go (Golang) es un lenguaje de programación diseñado en Google en 2007 por Robert Griesemer, Rob Pike y Ken Thompson para ser:

Instalación

En Linux

# apt (debian/ubuntu)
sudo apt install golang
# pacman (arch)
sudo pacman -S go
# dnf (fedora/redhat)
sudo dnf install go

En macOS

brew install go

En Windows

Descargar desde go.dev

# prueba que funciona
go version
# si no, prueba el PATH de instalación directamenete
C:\Program Files\Go\bin\go.exe version

Estructura básica de un programa en Go

Archivo: main.go

package main

import "fmt"

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

Explicación:

Ejecutar:

go run main.go

Compilar:

go build

Variables y tipos básicos

Go es un lenguaje tipado:

var nombre string = "Juan"
// el operador ":=" (walrus operator) infiere el tipo y ahorra el uso de "var"
edad := 20
var activo bool = true

Tipos comunes:

Estructuras de control

Condicionales

if edad >= 18 {
    fmt.Println("Mayor de edad")
} else {
    fmt.Println("Menor de edad")
}

Ciclos

Go solo tiene for, pero es usado para for, while y range (rangos).

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

Tipo while:

i := 0
for i < 5 {
    i++
}

Tipo range:

for i := range 5 {
    fmt.Println(i)
}

Funciones

func saludar(nombre string) string {
    return "Hola " + nombre
}

Funciones con múltiples retornos:

func dividir(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("no se puede dividir entre cero")
    }
    return a / b, nil
}

Go trata a los errores como valores y se suele ver mucho el patrón (valor, error).

Introducción a servidores HTTP

Go incluye un servidor HTTP en su librería estándar: net/http.

Servidor básico

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hola desde mi servidor en Go")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Servidor corriendo en http://localhost:8080")
    http.ListenAndServe(":8080", nil)
}

Ejecuta:

go run main.go

Despues abre localhost:8080.

¿Qué está pasando?

Buenas prácticas y herramientas

// vas a toparte con este tipo de condicionales por todos lados usando Go
if err != nil {
    return err
}

Recursos adicionales