Как указать позиционные аргументы с пакетом флагов в Голанге?

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

wc filename.txt

С пакетом флажка похоже, что каждому знаку должно быть присвоено имя со значением по умолчанию, если оно не указано.

filename := flag.String("filename", "foo.txt", "Which file to count the words for")

Однако я не хочу значения по умолчанию, я хочу, чтобы программа выходила с кодом ошибки, если аргумент не указан. Как добавить обязательный аргумент в двоичный файл Go?

Я также хотел бы проанализировать аргументы с информацией о типе, поэтому просто проверка Args() напрямую не делает этого.

Ответы

Ответ 1

Вам просто нужно проверить flag.NArg().

От https://golang.org/pkg/flag/#NArg:

NArg - количество аргументов, оставшихся после обработки флагов.

flag.Parse()
if flag.NArg() == 0 { 
    flag.Usage()
    os.Exit(1)
}

Ответ 2

Вы также можете использовать функцию flag.Narg(), чтобы убедиться, что у вас есть необходимое количество позиционных аргументов, хотя я не знаю, что это дает вам более len (флаг .Args())

if flag.NArg() < minArgs { 
    // do something
    ...
}