2010-07-28 20 views
82

¿Cómo puedo obtener el nombre de mi propio programa en tiempo de ejecución? ¿Cuál es el equivalente de Go de C/C++ argv [0]? Para mí, es útil generar el uso con el nombre correcto.¿Cuál es el equivalente de argv [0]?

Actualización: se agregó un código.

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

En lugar de detectar la longitud de ' flag.Args() 'aquí podría usar [' flag.NArg() '] (http://golang.org/pkg/flag/#narg) –

+0

La respuesta correcta es' o s.Args [] ', not' flag.Args() '. El paquete de banderas es para analizar argumentos de línea de comandos como '-this -that', y' flag.Args() 'devuelve los argumentos restantes que no se analizan. Aquí hay un ejemplo: http://play.golang.org/p/_YtTcqLWnl – fiorix

Respuesta

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

Los argumentos se exponen en el paquete de oshttp://golang.org/pkg/os/#Variables

Si vas a hacer un manejo argumento, el paquete de flaghttp://golang.org/pkg/flag es la manera preferida. Específicamente para su caso flag.Usage

Actualización para el ejemplo que diste:

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

debe hacer el truco

+0

No pude encontrar la manera de ponerlo en bandera y no sabía que os tiene esa información. Gracias. – grokus

+1

advertencia - no use esta técnica si está invocando un programa a través de "ir a ejecutar", obtendrá el a.out autogenerado. –

+8

@bradclawsie obtienes a.out porque ese es el nombre del ejecutable, el comportamiento sigue siendo correcto. – cthom06

13

uso os.Args[0] del paquete os

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