Ниже приведен код Go, который использует docopt для анализа аргументов командной строки. В моем примере программы есть две команды: показать и удалить. Шоу принимает один аргумент. Delete принимает несколько аргументов.
Вот проблема: id является повторяющимся аргументом в команде delete . В результате args["<id>"]
представляет собой фрагмент строки. Но это также фрагмент строки, если я запускаю myapp с командой show , которая ожидает только один аргумент. Есть ли способ сделать args["<id>"]
строкой (вместо среза строки) при вызове команды show ?
Конечно, я мог бы переименовать id в идентификаторы для повторяющегося аргумента, но я думаю, что повторяющиеся имена аргументов не должны быть во множественном числе. Прямо сейчас я просто использую первый элемент в срезе строки при обработке команды show , но для меня это выглядит как обходной путь. Есть ли более идиоматическое c решение?
package main
import (
"fmt"
"github.com/docopt/docopt-go"
)
func main() {
usage := `Usage:
myapp show <id>
myapp delete <id>...`
args, _ := docopt.ParseDoc(usage)
fmt.Println(args)
}
$ ./myapp delete a b c
map[<id>:[a b c] delete:true show:false]
$ ./myapp show a
map[<id>:[a] delete:false show:true]