filepath.Glob în Go

Returnează toate fișierele de pe disc ale căror nume se potrivesc unui model cu *, ? și [ ].

Sintaxă
func Glob(pattern string) (matches []string, err error)

Ce face filepath.Glob

filepath.Glob caută pe disc fișierele care se potrivesc modelului, folosind aceleași reguli ca filepath.Match: * (orice șir fără separator), ? (un caracter), [abc], [a-z], [^0-9]. Rezultatele sunt sortate alfabetic.

* nu trece de separator, iar Glob nu are ** (căutare recursivă). Pentru toate subdirectoarele folosește filepath.WalkDir. Erorile de citire a directoarelor sunt ignorate; singura eroare posibilă este filepath.ErrBadPattern pentru un model greșit.

Parametri

Parametru Descriere
pattern Modelul, de exemplu "*.txt" sau "poze/2025-??-*.jpg".

Ce returnează

Lista căilor găsite (poate fi goală) și nil, sau ErrBadPattern.

Exemple

Exemplul 1: Căutare după extensie și după model

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    os.Mkdir("poze", 0o755)
    for _, n := range []string{"2025-07-01-mare.jpg", "2025-08-15-munte.jpg", "2024-12-24-brad.jpg", "lista.txt"} {
        os.WriteFile(filepath.Join("poze", n), nil, 0o644)
    }

    toate, _ := filepath.Glob("poze/*.jpg")
    fmt.Println(toate)
    vara, _ := filepath.Glob("poze/2025-0[78]-*.jpg")
    fmt.Println(vara)
    nimic, err := filepath.Glob("poze/*.png")
    fmt.Println(nimic, len(nimic), err)
}

Rezultat

[poze/2024-12-24-brad.jpg poze/2025-07-01-mare.jpg poze/2025-08-15-munte.jpg]
[poze/2025-07-01-mare.jpg poze/2025-08-15-munte.jpg]
[] 0 <nil>

Exemplul 2: Model greșit

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    _, err := filepath.Glob("raport[.txt")
    fmt.Println(err)
    fmt.Println(err == filepath.ErrBadPattern)
}

Rezultat

syntax error in pattern
true

Greșeli frecvente

  • Folosești **/*.go ca în shell. Glob nu caută recursiv; ** se comportă ca *.
  • Te aștepți la eroare când nu se găsește nimic. Primești o listă goală și nil.

Comenzi înrudite

  • filepath.Match: Verifică dacă un nume se potrivește unui model de tip shell (*, ?, [ ]), fără să acceseze discul.
  • filepath.WalkDir: Parcurge recursiv un director și apelează o funcție pentru fiecare fișier și subdirector, în ordine alfabetică.
  • os.DirFS: Transformă un director de pe disc într-un fs.FS, sistemul de fișiere abstract din Go.
  • filepath.Ext: Returnează extensia fișierului: textul de la ultimul punct din ultimul element, inclusiv punctul.