Ce face os.Executable
os.Executable spune unde se află binarul programului. Îl folosești ca să găsești fișiere livrate lângă program (configurare, șabloane) sau ca să pornești programul din nou ca proces copil.
Calea poate fi o legătură simbolică; pentru calea reală apelează filepath.EvalSymlinks. Cu go run, executabilul este compilat într-un director temporar, deci calea arată ciudat; cu go build primești locul real.
Ce returnează
Calea executabilului și nil, sau o eroare.
Exemple
Exemplul 1: Numele executabilului
Pentru verificarea exemplelor, programul este compilat cu numele program.
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
exe, err := os.Executable()
if err != nil {
fmt.Println("eroare:", err)
return
}
fmt.Println("nume:", filepath.Base(exe))
fmt.Println("cale absolută:", filepath.IsAbs(exe))
}
Rezultat
nume: program
cale absolută: true
Exemplul 2: Fișier de configurare lângă program
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
exe, _ := os.Executable()
config := filepath.Join(filepath.Dir(exe), "setari.json")
fmt.Println("caut configurarea în:", config)
}
Rezultat pentru programul instalat în /opt/facturi
caut configurarea în: /opt/facturi/setari.json
Greșeli frecvente
- Folosești
os.Args[0]în loc deos.Executable.os.Args[0]este exact ce s-a scris în terminal (poate fi relativ sau doar un nume dinPATH). - Cauți fișiere lângă executabil în timpul dezvoltării cu
go run. Executabilul stă atunci într-un director temporar.
Comenzi înrudite
os.Getwd: Returnează calea absolută a directorului curent (working directory).filepath.EvalSymlinks: Returnează calea reală, după ce urmează toate legăturile simbolice din ea.os.Exit: Oprește imediat programul cu codul de ieșire dat; funcțiile amânate cu defer nu mai rulează.