Функция flag.Args

Функция flag.Args возвращает слайс строк, содержащий все аргументы командной строки, которые не были обработаны пакетом flag. То есть это те аргументы, которые не являются определенными флагами (например, не начинаются с - или не соответствуют объявленным флагам). Обычно она используется после вызова flag.Parse, чтобы получить доступ к позиционным аргументам.

Синтаксис

goflag.Args() []string

Функция не принимает параметров и возвращает слайс строк.

Пример

Рассмотрим простую программу, которая ожидает несколько позиционных аргументов после флагов:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  // Определяем флаг -name
  name := flag.String("name", "Guest", "user name")

  // Парсим аргументы командной строки
  flag.Parse()

  // Получаем необработанные аргументы
  args := flag.Args()

  fmt.Println("Name:", *name)
  fmt.Println("Args:", args)
}

Если запустить программу с командой:

gogo run main.go -name=Alice arg1 arg2 arg3

Результат выполнения кода:

go"Name: Alice"
"Args: [arg1 arg2 arg3]"

Как видим, флаг -name был обработан и исключен из результата, а остальные аргументы попали в слайс.

Пример

Если не обработанных аргументов нет, функция возвращает пустой слайс:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  flag.Parse()
  res := flag.Args()
  fmt.Println(res)
}

Запустим программу без дополнительных аргументов:

gogo run main.go

Результат выполнения кода:

go[]

Возвращается пустой слайс, так как аргументы не были переданы.

Пример

Важно, что функция flag.Args работает только после вызова flag.Parse. Если вызвать ее до парсинга, она вернет все аргументы, включая флаги:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  // Вызываем flag.Args до flag.Parse
  resBefore := flag.Args()
  fmt.Println("Before parse:", resBefore)

  flag.Parse()
  resAfter := flag.Args()
  fmt.Println("After parse:", resAfter)
}

Запустим программу с флагом:

gogo run main.go -x=123

Результат выполнения кода:

go"Before parse: [-x=123]"
"After parse: []"

До парсинга функция вернула все аргументы, включая флаг, а после парсинга флаг был обработан и удален из слайса.

Смотрите также

  • функцию flag.Arg,
    которая возвращает отдельный аргумент по индексу
  • функцию flag.NArg,
    которая возвращает количество необработанных аргументов
  • функцию flag.Parse,
    которая выполняет парсинг флагов командной строки
  • массив os.Args,
    который содержит все аргументы командной строки