Golang percorrendo a árvore de diretórios

Eu enfrentava o problema de ter que digitar o caminho completo para acessar o diretório do projeto no qual queria trabalhar. Tudo está no GOPATH e os caminhos geralmente são longos. Embora digitar o caminho completo de vez em quando seja aceitável, trabalho diariamente com golang em vários projetos. Ter que digitar o caminho completo constantemente se torna entediante. Às vezes, eu nem sei exatamente onde o projeto está ou esqueço partes do caminho, como o nome do autor ou se está no GitHub ou em outro repositório.

Veja o vídeo deste arquivo aqui.

Eu usei a função Walk do pacote path/filepath. Essa função é simples e recebe dois parâmetros: uma string com o diretório raiz para iniciar a pesquisa e uma função que será chamada para cada arquivo ou diretório encontrado.

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

err = filepath.Walk(root, visit)

Neste exemplo, visit é a função que recebe os dados do item atual, que pode ser um diretório ou um arquivo.

A função deve ter o seguinte formato:

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

O valor de retorno varia conforme o comportamento desejado. Por exemplo, retornar nil faz com que Walk prossiga para o próximo arquivo ou diretório. Retornar filepath.SkipDir faz com que o diretório atual seja ignorado, ou seja, Walk não entra nele. Retornar io.EOF faz com que Walk pare e retorne para a função que a chamou. Você também pode retornar qualquer outro valor que implemente a interface error.

Cesar Gimenes

Última modificação