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!!