Múltiplos Ganchos
Nesta página
Você pode registrar quantos blocos on quiser — de tipos iguais ou diferentes.
O runtime os organiza em pilhas separadas por tipo e os dispara seguindo duas
regras:
on shutdown— LIFO: o bloco declarado por último roda primeiro.on panic— dispara antes doon shutdownquando o encerramento é causado por um pânico não capturado.
O exemplo abaixo registra três ganchos on shutdown e um on panic, depois
executa o programa normalmente (sem pânico). Os três blocos de shutdown rodam em
ordem inversa de declaração — 3, 2, 1:
Três ganchos on shutdown (LIFO) e um on panic — disparo na saída normal.
Rode localmente para ver [hook 3], [hook 2] e [hook 1] nessa ordem, mais
process.uptime() no início.
// Lifecycle hooks demo — `on shutdown`, `on signal`, `on panic`.
// Companion: specs/lifecycle-hooks.md
use std::process
// Multiple shutdown blocks compose in LIFO order.
on shutdown {
print("[hook 1] outermost cleanup")
}
on shutdown reason {
print("[hook 2] reason was: {reason}")
}
on shutdown {
print("[hook 3] innermost cleanup")
}
on panic e {
print("[panic] uncaught: {e}")
}
print("uptime at start: {process.uptime()}s")
print("running main work...")
// Trigger normal-exit path; "on shutdown" should fire with reason="normal".
print("done")
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
A ordem LIFO espelha a convenção de defer: quem chegou por último sai
primeiro, garantindo que recursos abertos mais recentemente sejam fechados
antes dos mais antigos.
Veja também