英文:
How to get a list of values into a flag in Golang?
问题
Golang中的等效命令是什么?
import "flag"
getList1 := flag.String("getList1", "", "get 0 or more values")
getList2 := flag.String("getList2", "", "get 1 or more values")
flag.Parse()
我注意到flag包允许在Golang中进行参数解析。但是它似乎只支持String、Int或Bool类型。如何以以下格式将值列表传递给flag:
go run myCode.go -getList1 value1 value2
英文:
What is Golang's equivalent of the below python commands ?
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")
I have seen that the flag package allows argument parsing in Golang.
But it seems to support only String, Int or Bool.
How to get a list of values into a flag in this format :
go run myCode.go -getList1 value1 value2
答案1
得分: 195
你可以定义自己的flag.Value
并使用flag.Var()
将其绑定。
示例在这里。
然后你可以像下面这样传递多个标志:
go run your_file.go --list1 value1 --list1 value2
更新:为了防止出错,这里包含了代码片段。
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()
}
英文:
You can define your own flag.Value
and use flag.Var()
for binding it.
The example is here.
Then you can pass multiple flags like following:
go run your_file.go --list1 value1 --list1 value2
UPD: including code snippet right there just in case.
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
得分: 20
你可以使用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"]
。
英文:
You can at least have a list of arguments on the end of you command by using the flag.Args()
function.
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
will print Tail: ["this" "is" "the" "rest"]
答案3
得分: 16
使用flag.String()来获取你需要的参数的整个值列表,然后使用strings.Split()将其拆分为单个项。
英文:
Use flag.String() to get the entire list of values for the argument you need and then split it up into individual items with strings.Split().
答案4
得分: 2
如果在命令行的末尾有一系列整数值,这个辅助函数将正确地将它们转换并放入一个int
切片中:
package main
import (
"flag"
"fmt"
"strconv"
)
func GetIntSlice(i *[]string) []int {
var arr = *i
ret := []int{}
for _, str := range arr {
one_int, _ := strconv.Atoi(str)
ret = append(ret, one_int)
}
return ret
}
func main() {
flag.Parse()
tail := flag.Args()
fmt.Printf("Tail: %T, %+v\n", tail, tail)
intSlice := GetIntSlice(&tail)
fmt.Printf("intSlice: %T, %+v\n", intSlice, intSlice)
}
mac:demoProject sx$ go run demo2.go 1 2 3 4
Tail: []string, [1 2 3 4]
intSlice: []int, [1 2 3 4]
这段代码定义了一个名为GetIntSlice
的函数,它接受一个[]string
类型的指针作为参数,并返回一个[]int
类型的切片。函数内部使用strconv.Atoi
函数将字符串转换为整数,并将其添加到结果切片中。在main
函数中,我们使用flag
包解析命令行参数,并将剩余的参数传递给GetIntSlice
函数进行处理。最后,我们打印出结果切片的类型和值。
英文:
If you have a series of integer values at the end of the command line, this helper function will properly convert them and place them in a slice of int
s:
package main
import (
"flag"
"fmt"
"strconv"
)
func GetIntSlice(i *[]string) []int {
var arr = *i
ret := []int{}
for _, str := range arr {
one_int, _ := strconv.Atoi(str)
ret = append(ret, one_int)
}
return ret
}
func main() {
flag.Parse()
tail := flag.Args()
fmt.Printf("Tail: %T, %+v\n", tail, tail)
intSlice := GetIntSlice(&tail)
fmt.Printf("intSlice: %T, %+v\n", intSlice, intSlice)
}
mac:demoProject sx$ go run demo2.go 1 2 3 4
Tail: []string, [1 2 3 4]
intSlice: []int, [1 2 3 4]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论