filepath.Match în Go

Verifică dacă un nume se potrivește unui model de tip shell (*, ?, [ ]), fără să acceseze discul.

Sintaxă
func Match(pattern, name string) (matched bool, err error)

Ce face filepath.Match

filepath.Match compară textul name cu modelul. Reguli: * = orice șir de caractere fără separator, ? = exact un caracter (nu separator), [abc] sau [a-z] = un caracter din listă, [^a-z] = un caracter care nu e în listă, \\ scapă caracterul următor (doar pe Unix).

Modelul trebuie să se potrivească cu tot numele, nu doar cu o parte. Funcția nu caută fișiere; pentru căutare pe disc folosește filepath.Glob.

Parametri

Parametru Descriere
pattern Modelul.
name Textul verificat.

Ce returnează

true dacă se potrivește, plus ErrBadPattern pentru un model greșit.

Exemple

Exemplul 1: Reguli de potrivire

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    teste := [][2]string{
        {"*.csv", "vanzari.csv"},
        {"*.csv", "date/vanzari.csv"},
        {"raport-202?.pdf", "raport-2025.pdf"},
        {"raport-202?.pdf", "raport-20255.pdf"},
        {"[A-M]*", "Ana"},
        {"[A-M]*", "Radu"},
        {"[^0-9]*", "a1"},
    }
    for _, t := range teste {
        ok, _ := filepath.Match(t[0], t[1])
        fmt.Printf("%-16s %-18s %v\n", t[0], t[1], ok)
    }
}

Rezultat

*.csv            vanzari.csv        true
*.csv            date/vanzari.csv   false
raport-202?.pdf  raport-2025.pdf    true
raport-202?.pdf  raport-20255.pdf   false
[A-M]*           Ana                true
[A-M]*           Radu               false
[^0-9]*          a1                 true

Exemplul 2: Filtrarea fișierelor de ignorat

package main

import (
    "fmt"
    "path/filepath"
)

func ignorat(nume string, modele []string) bool {
    for _, m := range modele {
        if ok, _ := filepath.Match(m, nume); ok {
            return true
        }
    }
    return false
}

func main() {
    modele := []string{"*.tmp", "*.log", ".DS_Store"}
    for _, f := range []string{"main.go", "debug.log", ".DS_Store", "date.tmp", "README.md"} {
        fmt.Printf("%-10s ignorat: %v\n", f, ignorat(f, modele))
    }
}

Rezultat

main.go    ignorat: false
debug.log  ignorat: true
.DS_Store  ignorat: true
date.tmp   ignorat: true
README.md  ignorat: false

Greșeli frecvente

  • Te aștepți ca *.csv să se potrivească și cu date/vanzari.csv. * nu trece de separator.
  • Ignori eroarea și un model greșit ([ neînchis) dă mereu false fără să afli.

Comenzi înrudite

  • filepath.Glob: Returnează toate fișierele de pe disc ale căror nume se potrivesc unui model cu *, ? și [ ].
  • filepath.Ext: Returnează extensia fișierului: textul de la ultimul punct din ultimul element, inclusiv punctul.
  • filepath.Base: Returnează ultimul element al unei căi: numele fișierului (sau al ultimului director).