Подтвердить что ты не робот

Как получить список значений в флаг в Голанге?

Что такое эквивалент 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 
4b9b3361

Ответ 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"]