struct { m sync.Map // Stores weak.Pointer[V] } func (c *WeakCache[K, V]) Set(key K, value *V) { wp := weak.Make(value) c.m.Store(key, wp) // Set auto-deletion with AddCleanup runtime.AddCleanup(value, func(k K) { if v, ok := c.m.Load(k); ok { if v.(weak.Pointer[V]) == wp { c.m.Delete(k) } } }, key) } func (c *WeakCache[K, V]) Get(key K) (*V, bool) { if v, ok := c.m.Load(key); ok { if ptr := v.(weak.Pointer[V]).Value(); ptr != nil { return ptr, true // Object exists } c.m.Delete(key) // Delete if GC'd } return nil, false }