Пользовательский флаг для списков в Golang
Пакет флагов Golang позволяет легко анализировать аргументы, но обычно поддерживает базовые типы, такие как строка, целое число, или логическое значение. Это может показаться ограничением при работе со списками значений.
Golang позволяет создавать собственные флаги путем реализации интерфейса flag.Value. Этот интерфейс требует реализации двух методов: String() и Set(). Определив пользовательский флаг для списков, вы можете включить анализ нескольких значений, передаваемых через флаги командной строки.
Определение пользовательского флага списка
Рассмотрим следующий пример :
package main import "flag" import "fmt" type arrayFlags []string // String() implements the flag.Value interface func (i *arrayFlags) String() string { return fmt.Sprintf("%v", *i) } // Set() implements the flag.Value interface 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() fmt.Println(myFlags) }
Определяет пользовательский тип флага, называемый arrayFlags, который принимает несколько значений. Флаг привязан к имени флага «list1» и может быть проанализирован с помощью flag.Parse().
Использование
Чтобы передать несколько значений с помощью этого пользовательского флага, вы можете запустить программу следующим образом:
go run your_file.go --list1 value1 --list1 value2 --list1 value3
Это заполнит переменную myFlags тремя предоставленными значениями: ["value1", "value2", "value3"]. Затем вы можете получить доступ к этим значениям в своей программе.
Игровая площадка
Для живого примера вы можете посетить следующую игровую площадку: [ссылка на игровую площадку]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3