Canonical guidance

Use when

Avoid

Preferred pattern

type Cache struct {
	mu sync.Mutex
	m  map[string]string
}

func (c *Cache) Set(k, v string) {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.m[k] = v
}

Anti-pattern

Explanation: This anti-pattern is tempting in growing codebases, but unclear lock boundaries make deadlocks and invariant violations much harder to reason about.

Why

Related pages

Sources