deferr

package
v0.0.0-...-919d8db Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2026 License: BSD-3-Clause Imports: 1 Imported by: 0

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

func Cleanup(err *error, f func() error) error

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) Add

func (c *Closers) Add(f func() error)

Add adds a cleanup function to be called later.

func (*Closers) Close

func (c *Closers) Close() error

Close calls all functions in reverse order and returns any errors joined.

func (*Closers) CloseOnErr

func (c *Closers) CloseOnErr(err *error)

CloseOnErr calls Close if *err is not nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL