# defr Golang `defer` statements but in Rust. ## Overview A simple library that provides a convenient macro for wrapping expressions with the `drop` method. ## What is defer? The meaning might vary but in the Golang context, `defer` is the [finalizer](https://en.wikipedia.org/wiki/Finalizer). Unlike C++ and Rust, Golang does not have destructor equivalents. [More on defer statements.](https://go.dev/ref/spec#Defer_statements) ## Difference `defer` calls in Golang are pushed onto a stack, then run in a last-in-first-out manner. ``` func main() {     defer run_4th()     defer run_3rd()     run_1st()     run_2nd() } ``` The expressions inside `defr!` block remain procedural. ``` fn main() { defr! { run_3rd(); run_4th(); } run_1st();     run_2nd(); } ``` ## Notes Definitely not a replacement for implementing the `Drop` trait. In fact, in most cases, the [RAII pattern](https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization) is the way.