Trabajo con el sistema de archivos en Go: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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.
  • io y io/ioutil — lectura y escritura de datos (en versiones recientes de Go se recomienda usar os en lugar de ioutil).
  • 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