cli flags

This commit is contained in:
badkaktus 2019-10-12 20:58:18 +03:00
parent 7d9228f759
commit e62cee4774
4 changed files with 53 additions and 47 deletions

View File

@ -63,7 +63,7 @@ Epoch
Временные файлы и директории (Temporary Files and Directories) Временные файлы и директории (Temporary Files and Directories)
Тестирование (Testing) Тестирование (Testing)
Аргументы командной строки (Command-Line Arguments) Аргументы командной строки (Command-Line Arguments)
Command-Line Flags Флаги командной строки (Command-Line Flags)
Command-Line Subcommands Command-Line Subcommands
Environment Variables Environment Variables
HTTP Clients HTTP Clients

View File

@ -1,10 +1,11 @@
# To experiment with command-line arguments it's best to # Чтобы поэкспериментировать с аргументами командной
# build a binary with `go build` first. # строки, лучше сначала создать двоичный файл с
# помощью `go build`.
$ go build command-line-arguments.go $ go build command-line-arguments.go
$ ./command-line-arguments a b c d $ ./command-line-arguments a b c d
[./command-line-arguments a b c d] [./command-line-arguments a b c d]
[a b c d] [a b c d]
c c
# Next we'll look at more advanced command-line processing # Далее мы рассмотрим более сложную обработку командной
# with flags. # строки с флагами.

View File

@ -1,13 +1,14 @@
// [_Command-line flags_](http://en.wikipedia.org/wiki/Command-line_interface#Command-line_option) // [_Флаги командной строки_](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 // для программ командной строки. Например, в `wc -l` - `-l`
// command-line flag. // является флагом командной строки.
package main package main
// Go provides a `flag` package supporting basic // Go предоставляет пакет `flag`, поддерживающий базовый
// command-line flag parsing. We'll use this package to // парсинг флагов командной строки. Мы будем использовать
// implement our example command-line program. // этот пакет для реализации нашего примера программы
// командной строки.
import ( import (
"flag" "flag"
"fmt" "fmt"
@ -15,34 +16,36 @@ import (
func main() { 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"` // объявляем строковой флаг `word` со значением по
// and a short description. This `flag.String` function // умолчанию `"foo"` и кратким описанием. Функция
// returns a string pointer (not a string value); // `flag.String` возвращает строковый указатель (не
// we'll see how to use this pointer below. // строковое значение); мы увидим, как использовать
// этот указатель ниже.
wordPtr := flag.String("word", "foo", "a string") wordPtr := flag.String("word", "foo", "a string")
// This declares `numb` and `fork` flags, using a // Объявляем флаги `numb` и `fork`, используя тот же
// similar approach to the `word` flag. // подход, что и выше.
numbPtr := flag.Int("numb", 42, "an int") numbPtr := flag.Int("numb", 42, "an int")
boolPtr := flag.Bool("fork", false, "a bool") 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 var svar string
flag.StringVar(&svar, "svar", "bar", "a string var") flag.StringVar(&svar, "svar", "bar", "a string var")
// Once all flags are declared, call `flag.Parse()` // Как только все флаги объявлены, вызовите `flag.Parse()`,
// to execute the command-line parsing. // чтобы выполнить парсинг командной строки.
flag.Parse() 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. // помощью `*wordPtr`, чтобы получить фактические
// значения.
fmt.Println("word:", *wordPtr) fmt.Println("word:", *wordPtr)
fmt.Println("numb:", *numbPtr) fmt.Println("numb:", *numbPtr)
fmt.Println("fork:", *boolPtr) fmt.Println("fork:", *boolPtr)

View File

@ -1,10 +1,10 @@
# To experiment with the command-line flags program it's # Чтобы поэкспериментировать с программой флагов командной
# best to first compile it and then run the resulting # строки, лучше сначала скомпилировать ее, а затем
# binary directly. # напрямую запустить полученный бинарный файл.
$ go build command-line-flags.go $ go build command-line-flags.go
# Try out the built program by first giving it values for # Попробуйте встроенную программу, сначала задав ей
# all flags. # значения для всех флагов.
$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag $ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt word: opt
numb: 7 numb: 7
@ -12,8 +12,8 @@ fork: true
svar: flag svar: flag
tail: [] tail: []
# Note that if you omit flags they automatically take # Обратите внимание, что если вы опустите флаги, они
# their default values. # автоматически примут свои значения по умолчанию.
$ ./command-line-flags -word=opt $ ./command-line-flags -word=opt
word: opt word: opt
numb: 42 numb: 42
@ -21,16 +21,17 @@ fork: false
svar: bar svar: bar
tail: [] tail: []
# Trailing positional arguments can be provided after # Конечные позиционные аргументы могут быть
# any flags. # предоставлены после любых флагов.
$ ./command-line-flags -word=opt a1 a2 a3 $ ./command-line-flags -word=opt a1 a2 a3
word: opt word: opt
... ...
tail: [a1 a2 a3] tail: [a1 a2 a3]
# Note that the `flag` package requires all flags to # Обратите внимание, что пакет `flag` требует, чтобы все
# appear before positional arguments (otherwise the flags # флаги отображались перед позиционными аргументами
# will be interpreted as positional arguments). # (в противном случае флаги будут интерпретироваться
# как позиционные аргументы).
$ ./command-line-flags -word=opt a1 a2 a3 -numb=7 $ ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt word: opt
numb: 42 numb: 42
@ -38,8 +39,9 @@ fork: false
svar: bar svar: bar
tail: [a1 a2 a3 -numb=7] tail: [a1 a2 a3 -numb=7]
# Use `-h` or `--help` flags to get automatically # Используйте флаги `-h` или `--help`, чтобы получить
# generated help text for the command-line program. # автоматически сгенерированный текст справки для
# программы командной строки.
$ ./command-line-flags -h $ ./command-line-flags -h
Usage of ./command-line-flags: Usage of ./command-line-flags:
-fork=false: a bool -fork=false: a bool
@ -47,9 +49,9 @@ Usage of ./command-line-flags:
-svar="bar": a string var -svar="bar": a string var
-word="foo": a string -word="foo": a string
# If you provide a flag that wasn't specified to the # Если вы укажете флаг, который не был указан для пакета
# `flag` package, the program will print an error message # флагов, программа напечатает сообщение об ошибке
# and show the help text again. # и снова покажет текст справки.
$ ./command-line-flags -wat $ ./command-line-flags -wat
flag provided but not defined: -wat flag provided but not defined: -wat
Usage of ./command-line-flags: Usage of ./command-line-flags: