Skip to content

Instantly share code, notes, and snippets.

@01x01
Last active February 1, 2019 14:58
Show Gist options
  • Save 01x01/007cb365e1c2f723593b4478ed1705ea to your computer and use it in GitHub Desktop.
Save 01x01/007cb365e1c2f723593b4478ed1705ea to your computer and use it in GitHub Desktop.
package main
import (
"flag"
"fmt"
"log"
"os"
"strings"
)
type Arrays []string
func (a *Arrays) String() string {
return fmt.Sprintf("%v",*a)
}
func (a *Arrays) Set(s string) error {
*a = strings.Split(s,",")
return nil
}
func main(){
retry := flag.Int("retry",-1,"retry times")
params := flag.String("params","","")
if *params == ""{
fmt.Println("No params")
return
}else {
fmt.Println(*params)
}
var logPrefix string
flag.StringVar(&logPrefix,"prefix","","logger prefix") // 只接受 string
var arr Arrays
flag.Var(&arr,"array","input array to iterate through.") // 接受自定义类型
flag.Parse()
logger := log.New(os.Stdout,logPrefix,log.Ldate)
retryCount := 0
for retryCount < *retry {
logger.Println("Retrying connection...")
logger.Printf("sending array %v \n",arr[0])
retryCount++
}
}
/*
flag 定义了3种类型函数
1 类似 flag.Int() 函数,返回一个指针,如果你要取得值,还需要 * 取出值
2 类似 flag.xxxVar() 函数,需要提供给它一个指针,
3.类似flag.Var() 这个指针类型还需要实现 Set 和 String 方法. 因为这个参数类型是属于 value 的接口
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment