How to implement a concurrent cache using sync.Map in Golang?

To implement a concurrent cache using sync.Map in Golang, follow these steps:

Step 1: Import the required packages

import ( "sync" "time" )

Step 2: Define the Cache struct

type Cache struct { cacheMap *sync.Map }

Step 3: Define the Set method to add or update a key-value pair in the cache

func (c *Cache) Set(key, value interface{}) { c.cacheMap.Store(key, value) }

Step 4: Define the Get method to retrieve a value by key from the cache

func (c *Cache) Get(key interface{}) (interface{}, bool) { return c.cacheMap.Load(key) }

Step 5: Define the Delete method to remove a key-value pair from the cache

func (c *Cache) Delete(key interface{}) { c.cacheMap.Delete(key) }

Step 6: Define the CleanupExpired method to periodically delete expired key-value pairs from the cache

func (c *Cache) CleanupExpired(duration time.Duration) { ticker := time.NewTicker(duration) go func() { for range ticker.C { c.cacheMap.Range(func(key, value interface{}) bool { // Implement the logic to check if the key-value pair has expired // If expired, delete the key-value pair from the cache return true }) } }() }

Step 7: Create an instance of the Cache struct and use its methods to interact with the cache

func main() { cache := &Cache{ cacheMap: &sync.Map{}, } cache.Set("key1", "value1") cache.Set("key2", "value2") value, ok := cache.Get("key1") if ok { fmt.Println(value) } cache.Delete("key2") }

Note: Replace the comment in Step 6 with the logic to check if a key-value pair has expired. You can use the time package's functions like time.Now() and duration comparisons to implement the expiration logic.