Как получить доступ к аргументам командной строки в Go? Они не передаются в качестве аргументов main
.
Полная программа, возможно, созданная путем связывания нескольких пакетов, должна иметь один пакет с именем main с функцией
func main() { ... }
определены. Функция main.main () не принимает аргументов и не возвращает значения.
flag
встроенный модуль Golang. Этоos.Args
немного упрощает парсингos.Exit()
чтобы вернуть конкретный код выхода вызывающему процессу.Ответы:
Вы можете получить доступ к аргументам командной строки с помощью
os.Args
переменной. Например,package main import ( "fmt" "os" ) func main() { fmt.Println(len(os.Args), os.Args) }
Вы также можете использовать пакет flag , который реализует синтаксический анализ флага командной строки.
источник
Аргументы командной строки можно найти в os.Args . Хотя в большинстве случаев лучше использовать флаг пакета, потому что он выполняет синтаксический анализ аргументов за вас.
источник
Flag - хороший пакет для этого.
// [_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()) }
источник
Ответ Питера - это именно то, что вам нужно, если вам просто нужен список аргументов.
Тем не менее, если вы ищете функциональность , аналогичную то , присутствующие на UNIX, то вы могли бы использовать идти реализацию в docopt . Вы можете попробовать это здесь .
docopt вернет JSON, который вы затем сможете обработать сколько угодно.
источник
Быстрый ответ:
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) }
Контрольная работа:
$ go run test.go 1 2 3 4 5
Вне:
[/tmp/go-build162373819/command-line-arguments/_obj/exe/modbus 1 2 3 4 5] [1 2 3 4 5] 3
источник
вы можете использовать, например, пакет флагов Golang,
package main import ( "flag" "fmt" ) func main() { wordPtr := flag.String("word", "default value", "a string for description") flag.Parse() fmt.Println("word:", *wordPtr) }
позвонить с cli
go run main.go -word=hello
выход
источник