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:
- Simple y legible
- Rápido y compilado
- Concurrente
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:
package main. Define el paquete principal.import. Importar librerías.func main(). Punto de entrada del programa.fmt.Println(). Imprime texto en consola.
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:
intfloat64stringbool
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?
http.HandleFunc. Registra una ruta (puedes visualizarlo como lo que sigue despues del.com/).ResponseWriter. Permite escribir la respuesta.Request. Contiene información de la petición.ListenAndServe. Inicia el servidor.
Buenas prácticas y herramientas
- Manejar errores explícitamente
// vas a toparte con este tipo de condicionales por todos lados usando Go
if err != nil {
return err
}
- Usar
go fmtpara formatear código - Usar
go mod initpara proyectos nuevos
Recursos adicionales
- Recomendado: Tour de Go
- Recomendado: Go by Example
