Documentation
¶
Overview ¶
Package deferr provides helpers for cleaning up resources on error.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Cleanup ¶
Cleanup calls f if *err is not nil and returns f's error. Use this for simple one-off cleanup in defer statements:
func NewComponent() (c *Component, err error) {
r1, err := initResource1()
if err != nil {
return nil, err
}
defer Cleanup(&err, r1.Close)
r2, err := initResource2()
if err != nil {
return nil, err
}
defer Cleanup(&err, r2.Close)
...
return &Component{r1, r2}, nil
}
Types ¶
type Closers ¶
type Closers struct {
// contains filtered or unexported fields
}
Closers collects cleanup functions to be called later. Use this when you need to reuse the closers (e.g., for a component's Close method):
func NewComponent() (c *Component, err error) {
var closers Closers
defer closers.CloseOnErr(&err)
r1, err := initResource1()
if err != nil {
return nil, err
}
closers.Add(r1.Close)
r2, err := initResource2()
if err != nil {
return nil, err
}
closers.Add(r2.Close)
...
return &Component{closers: closers}, nil
}
func (c *Component) Close() error {
return c.closers.Close()
}
Closers is not safe for concurrent use.
func (*Closers) CloseOnErr ¶
CloseOnErr calls Close if *err is not nil.
Click to show internal directories.
Click to hide internal directories.