with-open
opens values and guarantees cleanup
Usage:
(with-open [name value]* form*)Binds one or more values and ensures their :close procedures are called after the body finishes, even if an error is raised. If a bound value does not expose a callable :close, cleanup for that binding becomes a no-op.
An Example
(with-open [r (:some-resource factory)]
(: r :read))