os.Executable în Go

Returnează calea fișierului executabil care rulează acum (programul compilat).

Sintaxă
func Executable() (string, error)

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 de os.Executable. os.Args[0] este exact ce s-a scris în terminal (poate fi relativ sau doar un nume din PATH).
  • 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ă.