Функция flag.NFlag

Функция flag.NFlag возвращает количество флагов командной строки, которые были явно установлены при запуске программы. Она не учитывает флаги, которые были определены в коде, но не были переданы через командную строку. Функция не принимает никаких параметров и возвращает значение типа int, представляющее число явно переданных флагов. Эта функция полезна для проверки, какие флаги были указаны пользователем, и для определения, были ли переданы какие-либо флаги в программу.

Синтаксис

goflag.NFlag()

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

Пример

Давайте определим несколько флагов и проверим, сколько из них было передано при запуске программы:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  name := flag.String("name", "default", "user name")
  age := flag.Int("age", 0, "user age")
  verbose := flag.Bool("v", false, "verbose mode")
  flag.Parse()

  fmt.Println("Number of flags set:", flag.NFlag())
  fmt.Println("Name:", *name)
  fmt.Println("Age:", *age)
  fmt.Println("Verbose:", *verbose)
}

Результат выполнения кода с командой go run main.go -name John -age 30 -v:

go"Number of flags set: 3"
"Name: John"
"Age: 30"
"Verbose: true"

Как видим, функция flag.NFlag вернула 3, поскольку все три определенных флага были явно переданы.

Пример

Давайте проверим, сколько флагов будет передано, если некоторые флаги не указаны в командной строке:

gopackage main

import (
  "flag"
  "fmt"
)

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

  fmt.Println("Number of flags set:", flag.NFlag())
  fmt.Println("Name:", *name)
  fmt.Println("Age:", *age)
}

Результат выполнения кода с командой go run main.go -name Alice:

go"Number of flags set: 1"
"Name: Alice"
"Age: 0"

В этом случае функция вернула 1, так как только флаг -name был явно передан, а флаг -age остался со значением по умолчанию.

Пример

Давайте рассмотрим ситуацию, когда не передано ни одного флага:

gopackage main

import (
  "flag"
  "fmt"
)

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

  fmt.Println("Number of flags set:", flag.NFlag())
  fmt.Println("Name:", *name)
  fmt.Println("Age:", *age)
}

Результат выполнения кода с командой go run main.go:

go"Number of flags set: 0"
"Name: default"
"Age: 0"

Когда флаги не переданы, функция возвращает 0, а все переменные флагов используются со значениями по умолчанию.

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

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