![Go Reference](https://camo.githubusercontent.com/1a042cd4767fad2e98c02b8e0b118298788f24466bb8f47806ada36374a281ec/68747470733a2f2f706b672e676f2e6465762f62616467652f6c657369772e696f2f6465666572732e737667)
// Package defers handles program-wide defers.
//
// Defers are executed when defers.Exit() is called or when an interrupt signal
// is caught, whichever happens first.
//
// If an interrupt signal is caught, the program will exit with a status of
// 128 plus the signal number. In the event the signal number cannot be
// determined, the program will exit with exit status 1.
package main
import (
"fmt"
"os"
"lesiw.io/defers"
)
// Set stop to true to halt the program.
// This forces the Go Playground to send an os.Interrupt.
// Global defers will still run before the program ends.
var stop = false
var success bool
func main() {
defers.Add(func() {
if success {
fmt.Fprintln(os.Stderr, "The program executed successfully.")
} else {
fmt.Fprintln(os.Stderr, "The program was interrupted.")
}
})
fmt.Println("Preparing to send a greeting...")
if stop {
select {}
}
fmt.Println("Hello world!")
success = true
defers.Exit(0)
}
▶️ Run this example on the Go Playground