default в select?

Junior
688 просмотров
AFK Offer AI

default делает select неблокирующим. Если ни один канал не готов — выполняется default:

select {
case msg := <-ch:
    fmt.Println("received", msg)
case ch <- 42:
    fmt.Println("sent")
default:
    fmt.Println("no channel ready")
}

Без default — select блокируется до готовности любого канала.

Типичные применения:

// Non-blocking receive
select {
case msg := <-ch:
    process(msg)
default:
    // канал пуст, делаем что-то другое
}

// Try-send (отбросить если буфер полон) select { case ch <- msg: default: log.Println("channel full, dropping") }

Внимание: default в цикле с select создаёт busy loop (100% CPU). Используй ticker или time.After вместо этого.

Следующий вопрос

Что такое MVCC?