2010-07-28 1 views
82

Come posso ottenere il nome del mio programma in fase di esecuzione? L'equivalente di What's Go di argv [0] di C/C++? Per me è utile generare l'utilizzo con il nome giusto.What's Go è l'equivalente di argv [0]?

Aggiornamento: aggiunto un po 'di codice.

package main 

import (
    "flag" 
    "fmt" 
    "os" 
) 

func usage() { 
    fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n") 
    flag.PrintDefaults() 
    os.Exit(2) 
} 

func main() { 
    flag.Usage = usage 
    flag.Parse() 

    args := flag.Args() 
    if len(args) < 1 { 
     fmt.Println("Input file is missing."); 
     os.Exit(1); 
    } 
    fmt.Printf("opening %s\n", args[0]); 
    // ... 
} 
+2

Invece di rilevare la lunghezza del ' flag.Args() 'qui puoi usare [' flag.NArg() '] (http://golang.org/pkg/flag/#NArg) –

+0

La risposta giusta è' o s.Args [] ', non' flag.Args() '. Il pacchetto flag serve per analizzare gli argomenti della riga di comando come '-this -that' e' flag.Args() 'restituisce gli argomenti rimanenti che non sono analizzati. Ecco un esempio: http://play.golang.org/p/_YtTcqLWnl – fiorix

risposta

116
import "os" 
os.Args[0] // name of the command that it is running as 
os.Args[1] // first command line parameter, ... 

Gli argomenti sono esposti nel os pacchetto http://golang.org/pkg/os/#Variables

Se avete intenzione di fare gestione degli argomenti, il pacchetto http://golang.org/pkg/flagflag è il modo preferito. In particolare per il vostro caso flag.Usage

Aggiornamento per l'esempio che ha dato:

func usage() { 
    fmt.Fprintf(os.Stderr, "usage: %s [inputfile]\n", os.Args[0]) 
    flag.PrintDefaults() 
    os.Exit(2) 
} 

dovrebbe fare il trucco

+0

Non riuscivo a capire come ottenerlo in flag e non sapevo che OS avesse quell'informazione. Grazie. Avviso – grokus

+1

- non utilizzare questa tecnica se si sta invocando un programma tramite "go run", si otterrà l'a.out autogenerato. –

+8

@bradclawsie ottieni a.out perché è il nome dell'eseguibile, il comportamento è ancora corretto. – cthom06

13

uso os.Args[0] dal pacchetto os

package main 
import "os" 
func main() { 
    println("I am ", os.Args[0]) 
}