Pular para o conteúdo principal

victorstein.dev

70/100 Dias de Golang - Manipulação de caminhos com path/filepath

Table of Contents

# Manipulação de caminhos com path/filepath

O pacote path/filepath serve para manipular caminhos de arquivos de forma segura e multiplataforma.O pacote path trata caminhos com separadores do estilo Unix (/), independentemente do sistema operacional. É ideal para caminhos de URLs ou caminhos internos de sistemas de arquivos virtuais. Já o path/filepath trata caminhos do sistema de arquivos local, respeitando as convenções do sistema operacional (como \ no Windows e / no Linux).

Veja as principais funções do pacote:

Criar um path:

filepath.Join("pasta_1", "main.go")

No ambiente Linux a saída seria: pasta_1/main.go no Windows: pasta_1\main.go

Separar o diretório do nome do arquivo:

dir, file := filepath.Split("pasta_1/main.go")
fmt.Println("Dir:", dir)
fmt.Println("File:", file)

Saída:

Dir: pasta_1/
File: main.go

Podemos usar o filepath.Base e filepath.Dir para extrai o nome do arquivo ou o diretório do caminho.

fmt.Println(filepath.Base("pasta_1/main.go"))
fmt.Println(filepath.Dir("pasta_1/main.go")) 

Saída:

main.go
pasta_1

Pega somente a extensão do arquivo com a função filepath.Ext:

fmt.Println(filepath.Ext("main.go")) 

Saída:

.go

Converter um caminho relativo em absoluto.

absPath, err := filepath.Abs("pasta_1/main.go")
if err != nil {
    log.Fatal(err)
}
fmt.Println(absPath)

Percorrer diretórios:

err := filepath.WalkDir(".", func(path string, d fs.DirEntry, err error) error {
    if err != nil {
        return err
    }
    fmt.Println(path)
    return nil
})

Busca arquivos com padrões — muito útil!

matches, err := filepath.Glob("*.go")
if err != nil {
    log.Fatal(err)
}
fmt.Println(matches) 

Uma função muito legal é o Clean:

fmt.Println(filepath.Clean("home/../home//user/./docs"))

Saída:

home/user/pasta_1/main.go

Lembre sempre de consultar a documentação!!