在 Go 语言中,flag
包用于处理命令行参数。如果你想要使用 flag
包来处理数组,你需要自定义一个处理函数来解析命令行参数并将其存储在数组中。
以下是一个简单的例子,展示了如何使用 flag
包来解析一个字符串数组:
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
var myStrings []string
flag.StringSliceVar(&myStrings, "strings", []string{}, "a comma-separated list of strings")
flag.Parse()
fmt.Println("The strings are:")
for _, v := range myStrings {
fmt.Println(v)
}
}
在这个例子中,我们定义了一个 StringSliceVar
,它接受一个字符串数组的指针、一个默认值和一个描述。然后我们调用 flag.Parse()
来解析命令行参数。
你可以这样调用这个程序:
go run main.go -strings "apple,banana,cherry"
这将输出:
The strings are:
apple
banana
cherry
如果你想解析一个整数数组,你可以自定义一个解析函数:
package main
import (
"flag"
"fmt"
"strconv"
"strings"
)
func main() {
var myInts []int
flag.Var(func(s []string) error {
for _, s := range s {
i, err := strconv.Atoi(s)
if err != nil {
return err
}
myInts = append(myInts, i)
}
return nil
}, "ints", "a comma-separated list of integers")
flag.Parse()
fmt.Println("The ints are:")
for _, v := range myInts {
fmt.Println(v)
}
}
在这个例子中,我们定义了一个自定义的 flag.Var
,它接受一个函数和一个描述。这个函数接受一个字符串数组,将每个字符串转换为整数,然后将它们添加到整数数组中。
你可以这样调用这个程序:
go run main.go -ints "1,2,3"
这将输出:
The ints are:
1
2
3
请注意,flag.Var
接受的函数需要返回一个 error
,如果解析过程中出现错误,你可以返回这个错误。