Функция flag.NArg
Функция flag.NArg возвращает количество позиционных аргументов командной строки.
Позиционные аргументы - это аргументы, которые не привязаны к каким-либо флагам
и не начинаются с символа - или --. В отличие от функции flag.Args,
которая возвращает слайс всех позиционных аргументов, flag.NArg возвращает
только их количество. Эта функция удобна для проверки наличия необходимого
количества позиционных аргументов перед началом работы программы.
Синтаксис
flag.NArg() int
Функция flag.NArg не принимает никаких параметров и возвращает
целое число (int) - количество позиционных аргументов.
Пример
Давайте создадим программу, которая ожидает два позиционных аргумента и выводит их количество:
package main
import (
"flag"
"fmt"
)
func main() {
flag.Parse()
count := flag.NArg()
fmt.Printf("count: %d", count)
}
Результат выполнения кода с аргументами "arg1 arg2":
"count: 2"
Пример
Функция flag.NArg возвращает только количество позиционных аргументов,
игнорируя переданные флаги. Давайте проверим это на примере с флагами:
package main
import (
"flag"
"fmt"
)
func main() {
var name string
flag.StringVar(&name, "name", "", "user name")
flag.Parse()
fmt.Printf("args: %d\n", flag.NArg())
fmt.Printf("name: %s", name)
}
Результат выполнения кода с аргументами "-name=John arg1 arg2":
"args: 2"
"name: John"
Пример
Часто flag.NArg используют для проверки количества аргументов
перед их обработкой. Рассмотрим пример с валидацией:
package main
import (
"flag"
"fmt"
"os"
)
func main() {
flag.Parse()
if flag.NArg() < 2 {
fmt.Println("need at least 2 arguments")
os.Exit(1)
}
fmt.Printf("arguments: %v", flag.Args())
}
Результат выполнения кода с аргументами "arg1 arg2":
"arguments: [arg1 arg2]"
Результат выполнения кода с аргументом "arg1":
"need at least 2 arguments"
Смотрите также
-
функцию
flag.Args,
которая возвращает слайс всех позиционных аргументов -
функцию
flag.Arg,
которая возвращает позиционный аргумент по индексу -
функцию
flag.NFlag,
которая возвращает количество обработанных флагов -
функцию
flag.Parse,
которая выполняет парсинг флагов командной строки