# README
Closer

The aim of this package is to provide an universal way to catch the event of application’s exit and perform some actions before it’s too late. closer
doesn’t care about the way application tries to exit, i.e. was that a panic or just a signal from the OS, it calls the provided methods for cleanup and that’s the whole point.
Usage
Be careful, this package is using the singleton pattern (like net/http
does) and doesn't require any initialisation step. However, there’s an option to provide a custom configuration struct.
// Init allows user to override the defaults (a set of OS signals to watch for, for example).
func Init(cfg Config)
// Close sends a close request.
// The app will be terminated by OS as soon as the first close request will be handled by closer, this
// function will return no sooner. The exit code will always be 0 (success).
func Close()
// Bind will register the cleanup function that will be called when closer will get a close request.
// All the callbacks will be called in the reverse order they were bound, that's similar to how `defer` works.
func Bind(cleanup func())
// Checked runs the target function and checks for panics and errors it may yield. In case of panic or error, closer
// will terminate the app with an error code, but either case it will call all the bound callbacks beforehand.
// One can use this instead of `defer` if you need to care about errors and panics that always may happen.
// This function optionally can emit log messages via standard `log` package.
func Checked(target func() error, logging bool)
// Hold is a helper that may be used to hold the main from returning,
// until the closer will do a proper exit via `os.Exit`.
func Hold()
The the usage examples: example, example-error and example-panic.
Table of exit codes
All errors and panics will be logged if the logging option of closer.Checked
was set true, also the exit code (for os.Exit
) will be determined accordingly:
Event | Default exit code |
---|---|
error = nil | 0 (success) |
error != nil | 1 (failure) |
panic | 1 (failure) |
License
# Packages
No description provided by the author
# Functions
Bind will register the cleanup function that will be called when closer will get a close request.
Checked runs the target function and checks for panics and errors it may yield.
Close sends a close request.
Exit is the same as os.Exit but respects the closer's logic.
Fatalf works the same as log.Fatalf but respects the closer's logic.
Fatalln works the same as log.Fatalln but respects the closer's logic.
Hold is a helper that may be used to hold the main from returning, until the closer will do a proper exit via `os.Exit`.
Init allows user to override the defaults (a set of OS signals to watch for, for example).
# Variables
DebugSignalSet is a predefined list of signals to watch for.
DefaultSignalSet will have syscall.SIGABRT that should be opted out if user wants to debug the stacktrace.
ExitCodeErr is a failure exit code.
ExitCodeOK is a successfull exit code.
ExitSignals is the active list of signals to watch for.
# Structs
Config should be used with Init function to override the defaults.
A StackFrame contains all necessary information about to generate a line in a callstack.