Как получить список значений в флаг в Голанге?
Что такое эквивалент Golang для приведенных ниже команд python?
import argparse
parser = argparse.ArgumentParser(description="something")
parser.add_argument("-getList1",nargs='*',help="get 0 or more values")
parser.add_argument("-getList2",nargs='?',help="get 1 or more values")
Я видел, что пакет флагов разрешает разбор аргументов в Golang.
Но, похоже, он поддерживает только String, Int или Bool.
Как получить список значений в флаг в этом формате:
go run myCode.go -getList1 value1 value2
Ответы
Ответ 1
Вы можете определить свой собственный flag.Value
и использовать flag.Var()
для его привязки.
Пример здесь.
Затем вы можете передать несколько флагов, например:
go run your_file.go --list1 value1 --list1 value2
UPD: включая фрагмент кода прямо на всякий случай.
package main
import "flag"
type arrayFlags []string
func (i *arrayFlags) String() string {
return "my string representation"
}
func (i *arrayFlags) Set(value string) error {
*i = append(*i, value)
return nil
}
var myFlags arrayFlags
func main() {
flag.Var(&myFlags, "list1", "Some description for this param.")
flag.Parse()
}
Ответ 2
Используйте флаг.String(), чтобы получить весь список значений для необходимого вам аргумента, а затем разделите его на отдельные элементы со строками. Split().
Ответ 3
Вы можете, по крайней мере, иметь список аргументов в конце вашей команды, используя flag.Args()
.
package main
import (
"flag"
"fmt"
)
var one string
func main() {
flag.StringVar(&one, "o", "default", "arg one")
flag.Parse()
tail := flag.Args()
fmt.Printf("Tail: %+q\n", tail)
}
my-go-app -o 1 this is the rest
будет печатать Tail: ["this" "is" "the" "rest"]