Функция flag.Arg

Функция flag.Arg возвращает аргумент командной строки по указанному индексу. В отличие от flag.Args, которая возвращает все не флаговые аргументы в виде слайса, эта функция позволяет получить конкретный аргумент по его порядковому номеру. Индексация начинается с нуля. Если аргумента с указанным индексом не существует, функция возвращает пустую строку. Первым параметром функция принимает индекс аргумента.

Синтаксис

goflag.Arg(index)

Пример

Давайте получим первый аргумент командной строки и выведем его на экран. Запустим программу с командой go run main.go first second third:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  flag.Parse()
  arg := flag.Arg(0)
  fmt.Printf("First argument: %s", arg)
}

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

go"First argument: first"

Пример

Давайте получим все аргументы по отдельности, используя flag.Arg. Запустим программу с командой go run main.go a b c d e:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  flag.Parse()
  for i := 0; i < 5; i++ {
    fmt.Printf("arg[%d]: %s\n", i, flag.Arg(i))
  }
}

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

go"arg[0]: a"
"arg[1]: b"
"arg[2]: c"
"arg[3]: d"
"arg[4]: e"

Пример

Попробуем получить аргумент по несуществующему индексу. Запустим программу с командой go run main.go hello:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  flag.Parse()
  arg := flag.Arg(10)
  if arg == "" {
    fmt.Println("Argument not found")
  } else {
    fmt.Printf("Found: %s", arg)
  }
}

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

go"Argument not found"

Пример

Рассмотрим работу flag.Arg с флагами. При наличии объявленных флагов, аргументы возвращаются только для не флаговых значений. Запустим программу с командой go run main.go -name=John first second:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  name := flag.String("name", "default", "user name")
  flag.Parse()

  fmt.Printf("Name: %s\n", *name)
  fmt.Printf("Arg[0]: %s\n", flag.Arg(0))
  fmt.Printf("Arg[1]: %s\n", flag.Arg(1))
}

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

go"Name: John"
"Arg[0]: first"
"Arg[1]: second"

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

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