Trabajo con el sistema de archivos en Go: desde lo básico hasta técnicas avanzadas
Go (Golang) es un lenguaje de programación moderno conocido por su simplicidad y alto rendimiento. Una de las tareas clave que enfrenta cualquier desarrollador es trabajar con el sistema de archivos. En este artículo, analizaremos en detalle cómo crear, leer, escribir archivos, gestionar directorios y manejar rutas en Go. Obtendrá ejemplos prácticos de código que le ayudarán a dominar el trabajo con archivos de forma rápida y eficiente.
Paquetes principales para trabajar con el sistema de archivos
En Go, el trabajo con el sistema de archivos se concentra en tres paquetes principales de la biblioteca estándar:
os— operaciones básicas: abrir, crear, eliminar archivos y directorios.ioyio/ioutil— lectura y escritura de datos (en versiones recientes de Go se recomienda usarosen lugar deioutil).path/filepath— trabajo con rutas: combinación, división, obtención de extensiones.
Antes de comenzar, asegúrese de haber importado los paquetes necesarios:
package main
import ( "fmt" "os" "io" "path/filepath")Lectura y escritura de archivos en Go
Lectura completa de un archivo
La forma más sencilla de leer un archivo es usar la función os.ReadFile (disponible desde Go 1.16). Devuelve un slice de bytes y un error.
func readFileExample() { data, err := os.ReadFile("example.txt") if err != nil { fmt.Println("Error al leer el archivo:", err) return } fmt.Println(string(data))}Escritura en un archivo
Para escribir datos en un archivo, use os.WriteFile. Si el archivo no existe, se creará. Si existe, se sobrescribirá.
func writeFileExample() { content := []byte("¡Hola, mundo!Segunda línea.") err := os.WriteFile("output.txt", content, 0644) if err != nil { fmt.Println("Error al escribir:", err) return } fmt.Println("Archivo escrito exitosamente")}Lectura línea por línea de archivos grandes
Para procesar archivos grandes, es mejor usar lectura con búfer para no cargar todo el archivo en memoria.
import "bufio"
func readLineByLine() { file, err := os.Open("large_file.txt") if err != nil { fmt.Println("Error al abrir:", err) return } defer file.Close()
scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Println("Error de escaneo:", err) }}Trabajo con directorios en Go
Creación y eliminación de directorios
Para crear un solo directorio, use os.Mkdir; para directorios anidados, use os.MkdirAll.
func createDirectories() { // Crear una carpeta err := os.Mkdir("mydir", 0755) if err != nil { fmt.Println("Error al crear la carpeta:", err) }
// Crear estructura anidada err = os.MkdirAll("path/to/nested/dir", 0755) if err != nil { fmt.Println("Error al crear carpetas anidadas:", err) }}La eliminación de directorios se realiza con las funciones os.Remove (para vacíos) y os.RemoveAll (para no vacíos).
func removeDirectories() { // Eliminar carpeta vacía err := os.Remove("mydir") if err != nil { fmt.Println("Error al eliminar:", err) }
// Eliminar carpeta con todo su contenido err = os.RemoveAll("path/to") if err != nil { fmt.Println("Error al eliminar recursivamente:", err) }}Lectura del contenido de un directorio
La función os.ReadDir devuelve una lista de elementos en el directorio.
Blogs
Book Recommendations
Leer también
Bibliotecas Python 2025: cómo instalar y cuáles usar
¿Por qué Java no tiene parámetros por defecto? Un elegante rodeo
Código limpio en Swift: principios y ejemplos para iOS/macOS
Go para el aprendizaje automático: capacidades y limitaciones del lenguaje
C# para aprendizaje automático: posibilidades y limitaciones en la práctica