Работа с параметрами командной строки

Движение приносит победу

Говоря на чистоту, у автора было велико желание (и логика повествования требует этого), после рассмотрения функций незамедлительно перейти к методам, которые есть разновидность функций. Но есть вопросы, которые требуют ответов. давайте же сейчас заполним один из таких пробелов в наших знаниях, а именно: разберёмся с параметрами командной строки и способами их обработки.

Фактически, инструментов для такой работы - два. Это переменная пакета os, именуемая os.Args, а также специальный пакет flag. Пойдём по порядку.

os.Args

Экспортируемая переменная пакета os - os.Args - имеет тип []string. В первом элементе данного среза - os.Args[0] хранится название собственно текущего исполняемого файла, поэтому полезная информация начинается только со второго элемента:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Printf("%T\n", os.Args)
	fmt.Println(os.Args)

}
//Результат:
//D:\build>build.exe qwerty asdfg
//[]string
//[build.exe qwerty asdfg]

Как видите, данная переменная содержит просто строки, и нет никаких инструментов, которые бы позволяли ввести синтаксис командной строки в привычном стиле, как, к примеру, -param: или --help. Таким образом, используя os.Args вы будете вынуждены вручную парсить и обрабатывать пользовательский ввод, требуя от пользователя следовать вашему замыслу. приведу пример такой развёрнутой обработки user input`а:

Как видите, решение вполне работоспособно, но несколько громоздко. Теперь рассмотрим более специализированное решение - пакет flag.

Пакет flag

Это специализированный встроенный пакет для работы с параметрами командной строки. Он позволяет задавать имена и типы параметров-флагов, а также их значения по умолчанию. В случае неверного ввода, автоматически генерируется и выводится на экран справочная информация. Поэтому, если вы не хотите раскрывать пользователю перечень поддерживаемых вашей программой параметров, вам следует предпочесть использование os.Args, которая будет хранить молчание. Приведём пример работы с пакетом flags:

Как видите, тема компактная, но весьма полезная. Go - это язык преимущественно бэкэнда, поэтому при запуске исполнимого файла, daemon`а или windows-службы параметры командной строки - это скорее правило, чем редкость.

Раунд!

Last updated