package main import ( "bufio" "fmt" "local/args" "log" "os" "strings" ) func main() { as := args.NewArgSet() as.Append(args.STRING, "addr", "csv key;addr(s) of server(s)", "key;http://localhost:21412") as.Append(args.INT, "r", "read concern", 1) as.Append(args.INT, "w", "write concern", 1) if err := as.Parse(); err != nil { panic(err) } rConcern := as.Get("r").GetInt() wConcern := as.Get("w").GetInt() addrs := as.Get("addr").GetString() client, err := New(rConcern, wConcern, strings.Split(addrs, ",")...) if err != nil { panic(err) } reader := bufio.NewReader(os.Stdin) for { fmt.Print("> ") line, err := reader.ReadString('\n') if err != nil { panic(err) } do(client, strings.TrimSpace(line)) } } func do(client *Client, line string) { defer func() { if err := recover(); err != nil { log.Printf("err: %v", err) } }() switch strings.ToLower(strings.Split(line, " ")[0]) { case "help": log.Printf("get key1") log.Printf("set key1 value value value...") case "get": get(client, line) case "set": set(client, line) case "put": set(client, line) default: log.Printf("unknown command %v", line) } } func get(client *Client, line string) { words := strings.Split(line, " ") key := words[1] v, err := client.Get(key) log.Printf("get: %v: %s", err, v) } func set(client *Client, line string) { words := strings.Split(line, " ") key := words[1] value := strings.Join(words[2:], " ") err := client.Set(key, []byte(value)) log.Printf("set: %v", err) }