Comment accéder aux arguments de ligne de commande dans Go? Ils ne sont pas passés comme arguments à main
.
Un programme complet, éventuellement créé en liant plusieurs packages, doit avoir un package appelé main, avec une fonction
func main() { ... }
défini. La fonction main.main () ne prend aucun argument et ne renvoie aucune valeur.
flag
module Golang intégré. Cela rend l'analyseos.Args
un peu plus facileos.Exit()
pour renvoyer un code de sortie spécifique au processus appelant.Réponses:
Vous pouvez accéder aux arguments de la ligne de commande à l'aide de la
os.Args
variable. Par exemple,package main import ( "fmt" "os" ) func main() { fmt.Println(len(os.Args), os.Args) }
Vous pouvez également utiliser le package d'indicateur , qui implémente l'analyse d'indicateur de ligne de commande.
la source
Les arguments de ligne de commande peuvent être trouvés dans os.Args . Dans la plupart des cas, l' indicateur de package est meilleur car il analyse les arguments pour vous.
la source
Flag est un bon package pour cela.
// [_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 source
La réponse de Peter est exactement ce dont vous avez besoin si vous voulez juste une liste d'arguments.
Cependant, si vous recherchez des fonctionnalités similaires à celles présentes sous UNIX, vous pouvez utiliser l' implémentation go de docopt . Vous pouvez l'essayer ici .
docopt renverra JSON que vous pourrez ensuite traiter à votre guise.
la source
Réponse rapide:
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) }
Tester:
$ go run test.go 1 2 3 4 5
En dehors:
[/tmp/go-build162373819/command-line-arguments/_obj/exe/modbus 1 2 3 4 5] [1 2 3 4 5] 3
la source
vous pouvez utiliser le package d'indicateur Golang par exemple,
package main import ( "flag" "fmt" ) func main() { wordPtr := flag.String("word", "default value", "a string for description") flag.Parse() fmt.Println("word:", *wordPtr) }
appel avec cli
go run main.go -word=hello
production
la source