flag包用来解析命令行参数
package main
import (
"flag"
"fmt"
"strings"
)
// 根据不同的类型 接收不同的参数 变量名,默认值,解释
var (
port = flag.Uint("port", 8080, "The port to listen on. Default 8080.")
address = flag.String("address", "127.0.0.1", "The address on the local server to listen to. Default 127.0.0.1")
)
func main() {
flag.Parse() // 解析
//fmt.Println(port) // 0xc0000aa008 默认是指针
//fmt.Println(*port) // 8080
//// 执行方式 go run main.go -port 9090
fmt.Println(address) // 0xc000056270
fmt.Println(*address) // 2.2.2.2
// 执行方式 go run main.go -address 2.2.2.2
}
flag.var 用来解析自定义的类型
package main
import (
"flag"
"fmt"
"strings"
)
type StringList []string
// 注意 自定义的类型必须实现这两个方法
func (sl *StringList) String() string {
return fmt.Sprint(*sl)
}
func (sl *StringList) Set(value string) error {
for _, s := range strings.Split(value, ",") {
if len(s) == 0 {
return fmt.Errorf("value should not be an empty string")
}
*sl = append(*sl, s)
}
return nil
}
var (
etcdServerList StringList // 声明类型
)
func init() {
// 命令行参数 指针
flag.Var(&etcdServerList, "etcd_servers", "Servers for the etcd (http://ip:port), comma separated")
}
func main() {
flag.Parse()
fmt.Println(etcdServerList) // go run main.go => []
fmt.Println(etcdServerList) // go run main.go -etcd_servers 192.168.1.1,192.168.2.3 => [192.168.1.1 192.168.2.3]
}