k8s原始碼閱讀基礎 flag標準庫
阿新 • • 發佈:2022-05-15
參考文件:https://pkg.go.dev/[email protected]
應用:Package flag implements command-line flag parsing.
示例:util 包
package util import ( "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 }
main 包
package main import ( "TestGolang/util" "flag" "fmt" ) //注意:port、address、apiPrefix均為指標型別 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") apiPrefix = flag.String("api_prefix", "/api/v1beta1", "The prefix for API requests on the server. Default '/api/v1beta1'") etcdServerList util.StringList ) func init() { //Var方法使用指定的名字、使用資訊註冊一個flag。該flag的型別和值由第一個引數表示,該引數應實現了Value介面。 flag.Var(&etcdServerList, "etcd_servers", "Value type is string; Servers for the etcd (http://ip:port), comma separated") } func main() { //從os.Args[1:]中解析註冊的flag。 os.Args []string 保管了命令列引數,第一個是程式名。 flag.Parse() fmt.Printf("port type is %T \n", port) fmt.Println("port:", *port) fmt.Println("address:", *address) fmt.Println("apiPrefix:", *apiPrefix) fmt.Println("etcdServerList:", etcdServerList) }
help 效果:
D:\Projects\GolangProject\src\TestGolang>TestGolang.exe --help Usage of TestGolang.exe: -address string The address on the local server to listen to. Default 127.0.0.1 (default "127.0.0.1") -api_prefix string The prefix for API requests on the server. Default '/api/v1beta1' (default "/api/v1beta1") -etcd_servers value Value type is string; Servers for the etcd (http://ip:port), comma separated -port uint The port to listen on. Default 8080. (default 8080)
引數傳遞效果:
D:\Projects\GolangProject\src\TestGolang>TestGolang.exe -address "127.0.0.1" -api_prefix "/api/v1" -etcd_servers "http://192.168.1.2,http://192.168.1.3" -port 8090 port type is *uint port: 8090 address: 127.0.0.1 apiPrefix: /api/v1 etcdServerList: [http://192.168.1.2 http://192.168.1.3]