Go за Прикладом: Командний Рядок - Прапорці

Work in Progress / Сайт в процесі розробки

Прапорці командного рядку це загально прийнятий спосіб вказувати налаштування для программ призначений для командного рядку. Наприклад, в wc -l прапорецем є -l

package main

Пакет Go flag підтримує основні операції розбору прапорців командного рядку. Ми скористаємось цим пакетом, щоб створити власну программу для командного рядка.

import "flag"
import "fmt"
func main() {

Основні декларування прапорців доступні для рядків, цілих чисел та логічного типу даних. В цьому прикладі, ми декларуємо прапорець word з стандартним значенням "foo" та короткою довідкою. Функція flag.String повертає вказівник рядка (а не рядкову змінну), ми ще побачимо як користуватись таким вказівником трошки нижче.

    wordPtr := flag.String("word", "foo", "a string")

Тут ми декларуємо прапорці numb та fork використовуючи вже знаомий по прапорцю word підхід.

    numbPtr := flag.Int("numb", 42, "an int")
    boolPtr := flag.Bool("fork", false, "a bool")

Також можливо декларувати налаштування таким чином щоб вже існуюча змінна прийняла на себе значення передане прапорцю. Зауважте, що потрібно передати вказівник цієї змінної функції що декларує прапорець.

    var svar string
    flag.StringVar(&svar, "svar", "bar", "a string var")

Як тільки усі прапорці декларовані, викличемо flag.Parse() щоб виконати аналіз конмадного рядку.

    flag.Parse()

Ми просто виведемо на екран усі розпізнані налаштуванняч та позиційні аргументи. Зауважте, що нам потрібно розіменувати вказівник, наприклад *wordPtr, щоб добути справжнє значення налаштування.

    fmt.Println("word:", *wordPtr)
    fmt.Println("numb:", *numbPtr)
    fmt.Println("fork:", *boolPtr)
    fmt.Println("svar:", svar)
    fmt.Println("tail:", flag.Args())
}

Щоб проексперементувати з прапорцями командного рядку, краще всього спершу скомпілювати нашу программу і вже потім запускати двійковий файл напряму.

$ go build command-line-flags.go

Спробуйте спершу скомпільовану программу давши значення усім прапорцям.

$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []

Зауважте, що якщо ви пропустите прапорці, вони автоматично приймуть свої стандартні налаштування.

$ ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []

Заключні позиційні аргументи можуть бути вказані після будь яких прапорців.

$ ./command-line-flags -word=opt a1 a2 a3
word: opt
...
tail: [a1 a2 a3]

Note that the flag package requires all flags to appear before positional arguments (otherwise the flags will be interpreted as positional arguments).

$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3 -numb=7]

Скористайтес прапорцями -h або --help щоб отримати автоматично згенеровану довідку по роботі з команднним рядком программи.

$ ./command-line-flags -h
Usage of ./command-line-flags:
  -fork=false: a bool
  -numb=42: an int
  -svar="bar": a string var
  -word="foo": a string

Якщо ви вкажете прапорець, якиц не було вказано в нашій программі, у відповідь, ви отримаєте повідомлення помилки та (повторно) тест довідки.

$ ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./command-line-flags:
...

Далі, ми розгялдемо змінні середовища, інший загальноприйнятий метод параметризації програм.

Наступний приклад: Змінні середовища.