package main import ( "fmt" "os" "bufio" "github.com/golang/groupcache" ) var stringGroup groupcache.Getter var ctx groupcache.Context func main() { // simple string reversal function used for the cache get reverseString := func(s string) string { n := len(s) res := make([]rune, n) for _, rune := range s { n-- res[n] = rune } return string(res) } // create the group cache with faked provider stringGroup = groupcache.NewGroup( "strings", 1 << 24, groupcache.GetterFunc(func(ctx groupcache.Context, key string, dest groupcache.Sink) error { // call a database, etc. fmt.Println("*** Get called:",key) return dest.SetString(reverseString(key)) }), ) reader := bufio.NewReader(os.Stdin) var line string var cacheValue string getLine := func() string { fmt.Printf("\n\rEnter key:") line, _, _ := reader.ReadLine() return string(line) } for line = getLine();len(line)>0; { stringGroup.Get(ctx, line, groupcache.StringSink(&cacheValue)) fmt.Println("Cache value:",cacheValue) line = getLine() } fmt.Println("Exiting....") }