go - studio - superponer graficas en r
¿Cómo acceder a los argumentos de línea de comando pasados a un programa Go? (5)
¿Cómo accedo a los argumentos de la línea de comandos en Go? No se pasan como argumentos a main
.
Un programa completo, posiblemente creado al vincular varios paquetes, debe tener un paquete llamado main, con una función
func main() { ... }
definido. La función main.main () no toma argumentos y no devuelve ningún valor.
Flag es un buen paquete para eso.
// [_Command-line flags_](http://en.wikipedia.org/wiki/Command-line_interface#Command-line_option)
// are a common way to specify options for command-line
// programs. For example, in `wc -l` the `-l` is a
// command-line flag.
package main
// Go provides a `flag` package supporting basic
// command-line flag parsing. We''ll use this package to
// implement our example command-line program.
import "flag"
import "fmt"
func main() {
// Basic flag declarations are available for string,
// integer, and boolean options. Here we declare a
// string flag `word` with a default value `"foo"`
// and a short description. This `flag.String` function
// returns a string pointer (not a string value);
// we''ll see how to use this pointer below.
wordPtr := flag.String("word", "foo", "a string")
// This declares `numb` and `fork` flags, using a
// similar approach to the `word` flag.
numbPtr := flag.Int("numb", 42, "an int")
boolPtr := flag.Bool("fork", false, "a bool")
// It''s also possible to declare an option that uses an
// existing var declared elsewhere in the program.
// Note that we need to pass in a pointer to the flag
// declaration function.
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
// Once all flags are declared, call `flag.Parse()`
// to execute the command-line parsing.
flag.Parse()
// Here we''ll just dump out the parsed options and
// any trailing positional arguments. Note that we
// need to dereference the pointers with e.g. `*wordPtr`
// to get the actual option values.
fmt.Println("word:", *wordPtr)
fmt.Println("numb:", *numbPtr)
fmt.Println("fork:", *boolPtr)
fmt.Println("svar:", svar)
fmt.Println("tail:", flag.Args())
}
La respuesta de Peter es exactamente lo que necesitas si solo quieres una lista de argumentos.
Sin embargo, si está buscando una funcionalidad similar a la presente en UNIX, entonces podría usar la implementación go de docopt . Puedes intentarlo here .
docopt devolverá JSON que luego puede procesar al contenido de su corazón.
Los argumentos de la línea de comando se pueden encontrar en os.Args . En la mayoría de los casos, aunque el indicador de paquete es mejor porque analiza el argumento por usted.
Puede acceder a los argumentos de la línea de comandos utilizando la variable os.Args
. Por ejemplo,
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(len(os.Args), os.Args)
}
También puede usar el paquete de banderas , que implementa el análisis de banderas de línea de comandos.
Respuesta rápida:
package main
import ("fmt"
"os"
)
func main() {
argsWithProg := os.Args
argsWithoutProg := os.Args[1:]
arg := os.Args[3]
fmt.Println(argsWithProg)
fmt.Println(argsWithoutProg)
fmt.Println(arg)
}
Prueba: $ go run test.go 1 2 3 4 5
Fuera:
[/tmp/go-build162373819/command-line-arguments/_obj/exe/modbus 1 2 3 4 5]
[1 2 3 4 5]
3
NOTA :
os.Args
proporciona acceso a argumentos de línea de comandos sinos.Args
. Tenga en cuenta que el primer valor en este segmento es la ruta al programa, yos.Args[1:]
contiene los argumentos para el programa. Reference