Flag包
flag.XXX
flag.XXX将返回一个指针变量,在下面的*host,*port可以看到,我们获取值是将获取指针的值
go
package main
import "fmt"
import "flag"
func main() {
host := flag.String("host","127.0.0.1","Please input hosts")
port := flag.Int("port",80,"please input Port")
flag.Parse()
fmt.Println(*host,*port)
}go
D:\awesomeProject\awesomeProject>flag.exe -host 127.0.0.1 -port 88
127.0.0.1 88flag.XXXVar
与之前不同的是,之前是声明好条件后,返回指针变量,而这种方式,是事先准备好变量,然后将变量的指针传入
Init()函数会在函数执行前执行
go
package main
import "fmt"
import "flag"
var (
host string
port int
)
func init() {
flag.StringVar(&host,"host","127.0.0.1","Please input hosts")
flag.IntVar(&port,"port",80,"please input Port")
}
// 这里的"127.0.0.1"为默认值,最后的为提示信息
func main() {
flag.Parse()
fmt.Println(host,port)
}go
D:\awesomeProject\awesomeProject>flag.exe -host 127.123123 -port 88
127.123123 88自定义值
在使用过程中,我们可能需要使用稍微复杂一点的数据类型,比如数组,切片等,这就需要我们自定义数据类型,来进行传入
flag.Var传入的值为一个Value的接口,这个接口需要实现两个方法:
String(): 将其字符串化Set(): 控制其如何对字符串进行解析
go
package main
import (
"flag"
"fmt"
"strings"
)
type person_name []string
func (p *person_name) String() string {
return fmt.Sprintf("%v", *p)
}
//按照,作为分隔符,将其放入一个数组
func (p *person_name) Set(s string) error {
for _,v := range strings.Split(s,","){
*p = append(*p,v)
}
return nil
}
var p person_name
func init() {
flag.Var(&p,"name","123123")
}
func main() {
flag.Parse()
fmt.Println(p)
}go
D:\awesomeProject\awesomeProject>flag.exe -name fsl,fsq
[fsl fsq]