Ce face filepath.EvalSymlinks
filepath.EvalSymlinks parcurge calea element cu element și înlocuiește fiecare legătură simbolică cu ținta ei, apoi curăță rezultatul. Spre deosebire de Clean, accesează discul, deci fișierul trebuie să existe.
Dacă porniți de la o cale relativă, rezultatul e relativ la directorul curent. Pe macOS, de exemplu, /tmp este o legătură spre /private/tmp, iar EvalSymlinks("/tmp") returnează /private/tmp.
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea de rezolvat. |
Ce returnează
Calea fără legături simbolice și nil, sau o eroare (de exemplu fișierul nu există).
Exemple
Exemplul 1: Urmarea unei legături
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
os.MkdirAll("versiuni/v2.3", 0o755)
os.WriteFile("versiuni/v2.3/app.conf", []byte("port=80"), 0o644)
os.Symlink("versiuni/v2.3", "curent")
real, err := filepath.EvalSymlinks("curent/app.conf")
fmt.Println(real, err)
_, err = filepath.EvalSymlinks("curent/lipsa.conf")
fmt.Println(err)
}
Rezultat
versiuni/v2.3/app.conf <nil>
lstat versiuni/v2.3/lipsa.conf: no such file or directory
Exemplul 2: Executabilul real
Programul instalat ca legătură în /usr/local/bin.
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
exe, _ := os.Executable()
real, _ := filepath.EvalSymlinks(exe)
fmt.Println("pornit ca:", exe)
fmt.Println("fișierul real:", real)
}
Rezultat posibil (diferă la fiecare rulare)
pornit ca: /usr/local/bin/facturi
fișierul real: /opt/facturi/v1.4/facturi
Greșeli frecvente
- Folosești
EvalSymlinkspe o cale care încă nu există (un fișier pe care urmează să-l creezi). Primești eroare; rezolvă doar directorul părinte.
Comenzi înrudite
os.Symlink: Creează o legătură simbolică (scurtătură) spre alt fișier; Readlink citește spre ce arată.filepath.Abs: Transformă o cale relativă în cale absolută, pornind de la directorul curent.filepath.Clean: Simplifică o cale: elimină separatoarele duble, „.” și rezolvă „..” doar din text, fără acces la disc.os.Executable: Returnează calea fișierului executabil care rulează acum (programul compilat).