Функция flag.NFlag
Функция flag.NFlag возвращает количество флагов командной строки,
которые были явно установлены при запуске программы. Она не учитывает
флаги, которые были определены в коде, но не были переданы через
командную строку. Функция не принимает никаких параметров и возвращает
значение типа int, представляющее число явно переданных флагов.
Эта функция полезна для проверки, какие флаги были указаны пользователем,
и для определения, были ли переданы какие-либо флаги в программу.
Синтаксис
flag.NFlag()
Функция вызывается без аргументов и возвращает целое число, которое равно количеству флагов, переданных в командной строке.
Пример
Давайте определим несколько флагов и проверим, сколько из них было передано при запуске программы:
package 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:
"Number of flags set: 3"
"Name: John"
"Age: 30"
"Verbose: true"
Как видим, функция flag.NFlag вернула 3,
поскольку все три определенных флага были явно переданы.
Пример
Давайте проверим, сколько флагов будет передано, если некоторые флаги не указаны в командной строке:
package 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:
"Number of flags set: 1"
"Name: Alice"
"Age: 0"
В этом случае функция вернула 1, так как только флаг
-name был явно передан, а флаг -age
остался со значением по умолчанию.
Пример
Давайте рассмотрим ситуацию, когда не передано ни одного флага:
package 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:
"Number of flags set: 0"
"Name: default"
"Age: 0"
Когда флаги не переданы, функция возвращает 0,
а все переменные флагов используются со значениями по умолчанию.
Смотрите также
-
функцию
flag.Parse,
которая разбирает командную строку и заполняет значения флагов -
функцию
flag.NArg,
которая возвращает количество позиционных аргументов -
функцию
flag.Args,
которая возвращает все позиционные аргументы в виде среза -
функцию
flag.Arg,
которая возвращает позиционный аргумент по индексу