filepath.Abs în Go

Transformă o cale relativă în cale absolută, pornind de la directorul curent.

Sintaxă
func Abs(path string) (string, error)

Ce face filepath.Abs

filepath.Abs lipește calea de directorul curent (os.Getwd) dacă nu este deja absolută, apoi o curăță cu Clean. Nu verifică dacă fișierul există și nu rezolvă legăturile simbolice.

Rezultatul depinde de locul din care rulezi programul. E util în mesaje („fișierul a fost salvat în …”) și când transmiți o cale altui program care rulează în alt director.

Parametri

Parametru Descriere
path Calea, relativă sau absolută.

Ce returnează

Calea absolută și nil, sau o eroare dacă directorul curent nu poate fi aflat.

Exemple

Exemplul 1: Calea absolută a unui fișier

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    abs, err := filepath.Abs("date/note.csv")
    if err != nil {
        fmt.Println("eroare:", err)
        return
    }
    fmt.Println(abs)
}

Rezultat când programul rulează din /home/ana/proiecte/catalog

/home/ana/proiecte/catalog/date/note.csv

Exemplul 2: Ce face Abs, verificat

Calea relativă este lipită de directorul curent; o cale deja absolută doar se curăță.

package main

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

func main() {
    wd, _ := os.Getwd()
    abs, _ := filepath.Abs("date/../note.csv")
    fmt.Println(abs == filepath.Join(wd, "note.csv"))

    abs, _ = filepath.Abs("/var/www/../log//nginx")
    fmt.Println(abs)
}

Rezultat

true
/var/log/nginx

Greșeli frecvente

  • Crezi că Abs verifică existența fișierului. Doar construiește textul căii.
  • Apelezi Abs după os.Chdir și primești alt rezultat decât înainte. Directorul curent face parte din calcul.

Comenzi înrudite

  • filepath.Rel: Calculează calea relativă care duce de la directorul basepath la targpath.
  • filepath.IsAbs: Spune dacă o cale este absolută (pornește de la rădăcina sistemului de fișiere).
  • os.Getwd: Returnează calea absolută a directorului curent (working directory).
  • filepath.EvalSymlinks: Returnează calea reală, după ce urmează toate legăturile simbolice din ea.