"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ## Como listar arquivos de maneira eficiente em diretórios grandes com Go?

## Como listar arquivos de maneira eficiente em diretórios grandes com Go?

Publicado em 2024-11-08
Navegar:342

## How to Efficiently List Files in Large Directories with Go?

Listagem eficiente de arquivos em diretórios grandes

Navegar programaticamente em diretórios com um grande número de arquivos pode representar desafios de desempenho. Para superar essas limitações, é essencial compreender os mecanismos subjacentes de leitura de diretório em Go.

Evitando Readdirnames

A abordagem convencional de uso do caminho de arquivo.Walk depende do ioutil. Funções ReadDir e filepath.Glob, que retornam fatias de arquivos. No entanto, essas funções sofrem de limitações de memória ao lidar com diretórios excessivamente grandes.

Em vez de usar ReadDirnames, que opera em arrays em buffer, considere os métodos Readdir ou Readdirnames de baixo nível diretamente. Esses métodos permitem a especificação de um tamanho de lote (n) maior que 0, possibilitando a recuperação de entradas de diretório em lotes.

Código de exemplo

O trecho de código a seguir demonstra como ler entradas de diretório usando Readdir:

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    files, err := ioutil.ReadDir("directory_path")
    if err != nil {
        fmt.Println(err)
        return
    }
    
    for _, file := range files {
        fmt.Println(file.Name())
    }
}

Ao especificar um tamanho de lote suficiente (por exemplo, 10.000), você pode processar com eficiência listagens de diretórios grandes sem encontrar problemas de memória.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3