Golang percorrendo a árvore de diretórios

Eu estava com um problema de ter que digitar o caminho completo para chegar no diretório do projeto que eu queria trabalhar, esta tudo no GOPATH e os caminhos geralmente são longos. Tudo bem digitar todo o caminho uma vez ou outra, mas como estou trabalhando todo dia com golang e em mais de um projeto ter que digitar o caminho completo rapidamente se torna uma tarefa entediante. E as vezes eu nem sei onde exatamente o projeto esta, as vezes não lembro alguma parte do path como o nome do autor ou se esta no GitHub ou em outro repositório.

Veja o vídeo desse arquivo aqui.

Eu usei a função Walk do pacote path/filepath que é bastante simples. Essa função recebe dois parâmetros, o primeiro uma string contendo o diretório raiz onde você quer iniciar a pesquisa e o segundo é uma função que será chamada para arquivo ou diretório sob o diretório raiz.

A chamada para a função Walk é assim:

err = filepath.Walk(root, visit)

Nesse exemplo visit é a função que vai receber os dados do item sendo acessado no momento, que pode ser um diretório ou um arquivo.

Essa função deve ter o seguinte formato:

func visit(path string, f os.FileInfo, err error) error {
    ...
    return nil
}

E o valor de retorno difere dependendo do comportamento que você quer, por exemplo se você retornar apenas um nil, Walk vai para o próximo arquivo ou diretório, já se você retornar filepath.SkipDir o diretório que esta sendo acessado agora vai ser ignorado ou seja Walk não vai entrar nele, e se você retornar io.EOF Walk vai parar e retornar para a função que o chamou. E claro você também retornar qualquer outro valor que implemente a interface error.

Cesar Gimenes

Última modificação