Учитывая эту простую программу Go, для которой требуется ровно один аргумент командной строки, как я могу ее улучшить, так что flag.Usage()
дает полезный результат?Как печатать использование для позиционного аргумента с пакетом пакетов Go?
package main
import (
"flag"
"fmt"
"os"
)
func main() {
flag.Parse()
if len(flag.Args()) == 0 {
flag.Usage()
os.Exit(1)
}
args := flag.Args()
fmt.Println(args[0])
}
Выходной ток без аргументов, приведенных:
$ ./args
Usage of ./args:
(т.е. использование пуст, так как я не могу найти способ сказать функцию использования(), которые требуются параметры).
можно удалить flag.Usage()
и заменить его чем-то вроде этого:
fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "<argument>")
Однако я не хочу изобретать велосипед, если уже есть хороший способ с flag.Usage()
. Тем более, что он уже обрабатывает необязательные аргументы:
$ ./args -foo
flag provided but not defined: -foo
Usage of ./args:
Спасибо, это работает. Я не уверен, почему Go не может определить позиционные аргументы, поскольку я думал, что они также будут распространены. Если бы я мог определить аргумент без имени, тогда мне не нужно было бы создавать пользовательскую функцию 'Usage()', встроенная функция могла бы обрабатывать ее вместе с другими. Тем не менее, ваше решение работает без дополнительного кода. :) – fazy