Quando si crea un contesto derivato ('ctx, cancel := context.WithTimeout(...)'), omettere l'istruzione 'defer cancel()' lascia attivi i timer e le goroutine interne del context package fino alla scadenza del timeout, sprecando memoria.
CONTEXT_LEAK_MISSING_CANCEL
→
Il runtime di Go rileva quando tutte le goroutine attive nel programma sono bloccate in attesa di canali o lock senza che alcuna goroutine possa sbloccarle, arrestando il processo.
FATAL_DEADLOCK
→
Inserire un costrutto 'select' con un ramo 'default' vuoto all'interno di un ciclo 'for' infinito causa un consumo del 100% di una CPU (busy loop) senza mai cedere il controllo allo scheduler del runtime.
SELECT_DEFAULT_BUSY_WAIT
→
Il panic viene sollevato quando il metodo 'wg.Done()' o 'wg.Add(-1)' viene invocato un numero di volte superiore rispetto ai job registrati con 'wg.Add()', portando il contatore interno sotto zero.
PANIC_WAITGROUP_NEGATIVE
→
Invocare 'mu.Unlock()' su un sync.Mutex o sync.RWMutex che non è stato preventivamente acquisito con 'mu.Lock()' innesca un panic fatale nel runtime.
PANIC_MUTEX_UNLOCK
→
Invocare 'wg.Add()' su una variabile sync.WaitGroup mentre un'altra goroutine è ancora in attesa su 'wg.Wait()' senza aver completato il ciclo precedente genera panic per violazione di consistenza.
PANIC_WAITGROUP_REUSED
→
La struttura 'atomic.Value' richiede che tutte le chiamate successive a '.Store()' ricevano sempre esattamente lo stesso tipo concreto della prima memorizzazione; memorizzare tipi diversi genera panic.
PANIC_ATOMIC_TYPE
→
L'anomalia si verifica quando un canale con buffer limitato si riempie completamente perché la goroutine produttrice genera messaggi più velocemente di quanto il consumer riesca a smaltirli.
CHANNEL_BUFFER_FULL
→