Biblioteca estándar de Go (Golang): una visión completa
El lenguaje Go (Golang), desarrollado en Google, es famoso por su concisión, alto rendimiento y soporte integrado para la concurrencia. Sin embargo, uno de sus principales "superpoderes" es su potente y bien diseñada biblioteca estándar. A diferencia de muchos otros lenguajes, donde es necesario agregar dependencias de terceros para resolver tareas básicas, Go proporciona todo lo necesario "listo para usar". En este artículo, realizaremos una visión completa de los paquetes clave de la biblioteca estándar de Go que serán útiles para todo desarrollador.
1. Entrada/Salida y trabajo con archivos: paquetes io, os, bufio
El paquete io es la base para todas las operaciones de entrada/salida. Sus interfaces io.Reader y io.Writer son una de las abstracciones más importantes en Go. De hecho, cualquier fuente de datos (archivo, conexión de red, cadena) puede representarse como un Reader, y cualquier destino como un Writer.
El paquete os proporciona funciones para interactuar con el sistema operativo: abrir/crear archivos, leer directorios, trabajar con variables de entorno.
El paquete bufio agrega almacenamiento en búfer, lo que acelera significativamente la lectura y escritura de grandes volúmenes de datos.
package main
import ( "bufio" "fmt" "os")
func main() { // Abrimos el archivo para lectura file, err := os.Open("example.txt") if err != nil { panic(err) } defer file.Close()
// Creamos un escáner con búfer scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) }
if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "Error de lectura:", err) }}2. Trabajo con texto y formato: paquetes strings, fmt, strconv
El paquete strings contiene cientos de funciones útiles para trabajar con cadenas: búsqueda, reemplazo, división, unión, eliminación de espacios en blanco y mucho más. El paquete strconv se encarga de convertir cadenas a números (y viceversa), así como de analizar valores booleanos.
El paquete fmt es una "navaja suiza" para la salida formateada. Implementa las funciones Printf, Sprintf y Fprintf, que funcionan con cualquier tipo que implemente la interfaz Stringer.
package main
import ( "fmt" "strconv" "strings")
func main() { // División de una cadena parts := strings.Split("a,b,c", ",") fmt.Println(parts) // [a b c]
// Conversión de cadena a número num, _ := strconv.Atoi("42") fmt.Printf("Número: %d", num) // Número: 42
// Formateo con ancho de campo fmt.Printf("|%10s|%5d|", "Hola", 123)}3. Redes y HTTP: paquetes net, net/http
El paquete net proporciona primitivas de bajo nivel para trabajar con TCP/UDP, DNS y direcciones IP. Pero la verdadera "estrella" es el paquete net/http. Permite crear servidores y clientes HTTP completos sin una sola dependencia de terceros.
Gracias al http.ServerMux integrado y al enfoque de middleware, puede enrutar fácilmente solicitudes, manejar JSON, gestionar cookies y sesiones. La biblioteca estándar de Go se utiliza en producción por gigantes como Docker, Kubernetes y Dropbox.
package main
import ( "encoding/json" "fmt" "net/http")
type Response struct { Message string `json:"message"`}
func helloHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Método no soportado", http.StatusMethodNotAllowed) return }
resp := Response{Message: "¡Hola, mundo!"} w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(resp)}
func main() { http.HandleFunc("/api/hello", hello También en la biblioteca
Event Bus y el patrón Observer en Rust: implementación de arquitectura basada en eventos
Scrutor C# (.NET): guía completa con ejemplos prácticos
Serialización de objetos en Kotlin: bibliotecas y ejemplos de código
Trabajo con XML en Swift (iOS/macOS): Foundation y SwiftXML
Serialización de objetos en Java: guía completa con ejemplos