flag包用来处理命令行参数,以下是基本用法,具体可查询文档。
package main
import (
"flag"
"fmt"
"os"
"strconv"
"strings"
)
type my struct {
i int
}
func (v *my) String() string {
return strconv.Itoa(v.i) //int转string
}
func (v *my) Set(temp string) error {
i, err := strconv.Atoi(temp) //string转int
v.i = i
return err
}
func main() {
fs := flag.NewFlagSet("echo", flag.ExitOnError) //返回一个新的flag set
n := fs.Bool("n", false, "ignore \\n") //绑定bool
sep := fs.String("s", " ", "间隔符 ") //绑定string
d := fs.Float64("d", 12.34, "double for test") //绑定float64
var myval my
myval.i = 1
fs.Var(&myval, "i", "int test") //绑定Value,Value是个接口,需要实现String和Set两个方法
fs.Parse(os.Args[1:]) //
fmt.Println(myval.i)
fmt.Println(*d)
fmt.Println(fs.NArg()) //返回flag之外参数的数量
fmt.Println(fs.NFlag()) //命令行设置的flag数量
fmt.Println(fs.Name()) //flat set的名字
fs.SetOutput(os.Stdout) //设置输出
fs.PrintDefaults() //将usage输出到标准错误流或者Setouput()指定的地方
rt := fs.Lookup("s") //查找flag,如果不存在返回nil
fmt.Println(*rt)
fmt.Print(strings.Join(fs.Args(), *sep))
if !*n {
fmt.Println()
}
}