¿Cómo listar un directorio en Go?
Para recorrer la estructura de un directorio en Go, podemos utilizar la función ReadDir
del paquete ioutil. Dicha función recibe el path incluyendo el directorio a recorrer, y retorna los nombres de archivos y directorios que este a su vez contenga. Cada uno de los valores retornados contiene:
- Name (el nombre del archivo o directorio).
- Size (tamaño en bytes).
- Mode (una representación de los permisos en bits).
- ModTime (la ultima fecha en que el archivo fue modificado).
- IsDir (indica si el archivo es o no un directorio).
- Sys (Información subyacente).
Ejemplo de un programa para listar un directorio en Go
Vamos a listar un directorio con el siguiente programa.
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
archivos, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, archivo := range archivos {
fmt.Println("Nombre:", archivo.Name())
fmt.Println("Tamaño:", archivo.Size())
fmt.Println("Modo:", archivo.Mode())
fmt.Println("Ultima modificación:", archivo.ModTime())
fmt.Println("Es directorio?:", archivo.IsDir())
fmt.Println("-----------------------------------------")
}
}
Descripción del programa para listar un directorio en Go
Abrimos el directorio mediante ioutil.ReadDir
que recibe el path del directorio a abrir, en este caso el directorio en donde se encuentra el programa.
archivos, err := ioutil.ReadDir(".")
En la variable archivos, tenemos un arreglo que vamos a recorrer mediante un for, este retorna para cada iteración retorna el indice de la iteración y los detalles del archivo.
for _, archivo := range archivos
En cada iteración vamos a imprimir los valores asociados a cada archivo.
fmt.Println("Nombre:", archivo.Name())
fmt.Println("Tamaño:", archivo.Size())
fmt.Println("Modo:", archivo.Mode())
fmt.Println("Ultima modificación:", archivo.ModTime())
fmt.Println("Es directorio?:", archivo.IsDir())
Si ejecutamos el programa obtendremos la salida con la información de cada archivo.
$ go run main.go
Nombre: 001
Tamaño: 102
Modo: drwxr-xr-x
Ultima modificación: 2019-06-13 01:51:54 -0400 EDT
Es directorio?: true
-----------------------------------------
Nombre: archivo1.txt
Tamaño: 0
Modo: -rw-r--r--
Ultima modificación: 2019-06-13 01:41:53 -0400 EDT
Es directorio?: false
-----------------------------------------
Nombre: archivo2.txt
Tamaño: 0
Modo: -rw-r--r--
Ultima modificación: 2019-06-13 01:41:58 -0400 EDT
Es directorio?: false
-----------------------------------------
Nombre: main.go
Tamaño: 472
Modo: -rw-r--r--
Ultima modificación: 2019-06-13 01:50:40 -0400 EDT
Es directorio?: false