package main import ( "bufio" "fmt" "log" "os" "strconv" "strings" ) func main() { rConcernS, ok := os.LookupEnv("RCONCERN") if !ok { rConcernS = "1" } wConcernS, ok := os.LookupEnv("WCONCERN") if !ok { wConcernS = "1" } rConcern, err := strconv.Atoi(rConcernS) if err != nil { panic(err) } wConcern, err := strconv.Atoi(wConcernS) if err != nil { panic(err) } client, err := New(rConcern, wConcern, strings.Split(os.Getenv("ADDR"), ",")...) 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 "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) }