A basic generic timed in-memory cache implementation supporting any comparable key type and any value type.
A basic usage example:
package main import ( "fmt" "time" "github.com/antichris/go-cache" ) func main() { // Initialize a new cache with string keys for string values. c := cache.New[string, string](10 * time.Millisecond) // Since the cache checks expiration timers in an asynchronous loop // always shut it down after use to avoid resource leaks. defer c.Shutdown() // A closure to output results of `Get` attempts for this demo. show := func(k string) { v, ok := c.Get(k) fmt.Printf("key: %q, value: %q, present: %v\n", k, v, ok) } // Try with a value that is absent from the cache. show("foo") c.Put("bar", "baz") // Try with the value that we just put in the cache. show("bar") // Wait a bit past the expiration time. time.Sleep(15 * time.Millisecond) // Try with the value that should be expired by now. show("bar") // Output: // key: "foo", value: "", present: false // key: "bar", value: "baz", present: true // key: "bar", value: "", present: false }go get github.com/antichris/go-cacheThe source code of this project is released under Mozilla Public License Version 2.0. See LICENSE.