lifecycle

package
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package lifecycle 提供实例式资源关闭栈,零第三方依赖且没有进程级全局状态。

Stack 零值总回收期限为 20 秒。使用 New(timeout) 可自定义整个栈的期限;0 沿用默认值,负值非法。调用方登记自己负责关闭的资源,Close 按登记的逆序执行; 即使某个关闭函数返回错误或 panic,仍在剩余期限内尝试其余函数。首次 Close 在 全部尝试后重新抛出第一个 panic;后续 Close 返回包含 panic 信息的汇总错误。 Close 不调用 panic 值的格式化方法;读取汇总错误文本时才生成 panic 信息。

典型用法(logger 和 client 已由调用方创建):

var stack lifecycle.Stack
if err := stack.Register(func() error { return logit.Close(logger) }); err != nil {
    return err
}
if err := stack.Register(client.Close); err != nil {
    return errors.Join(err, stack.Close())
}
// 服务排空结束或超时取消后:
return stack.Close()

日志关闭函数先登记,因此在其他资源关闭后才执行。共享资源只登记一次; 模块不需要依赖 lifecycle,也不应自行注册到全局关闭列表。 回调在独立 goroutine 执行,Close 在整体期限内逐个等待;超时返回 ErrCloseTimeout, 同时保留 context.DeadlineExceeded 和已完成错误,不再发起后续回收。迟到回调可能继续运行。 调用方须在回收超时后立即退出进程;库不调用 os.Exit。重复 Close 共用首次结果与期限。 自定义示例(需导入 time):

stack, err := lifecycle.New(15 * time.Second)
if err != nil {
	return err
}
return stack.Close()

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrClosed 表示关闭已开始,不能再登记关闭函数。
	ErrClosed = errors.New("lifecycle: stack closed")
	// ErrNilCloser 表示登记了 nil 关闭函数。
	ErrNilCloser = errors.New("lifecycle: nil close function")
	// ErrCloseTimeout 表示整个资源栈的回收期限耗尽;调用方应退出进程。
	ErrCloseTimeout = errors.New("lifecycle: close timeout")
)

Functions

This section is empty.

Types

type Stack

type Stack struct {
	// contains filtered or unexported fields
}

Stack 按登记逆序回收资源,全部回收共享期限;零值默认 20 秒,使用后不可复制。

func New

func New(closeTimeout time.Duration) (*Stack, error)

New 设置整个栈的回收期限;零值使用 20 秒,负值非法。期限创建后不可修改。

func (*Stack) Close

func (s *Stack) Close() (err error)

Close 逆序执行全部关闭函数并汇总错误;后续调用等待并返回已收集的错误。 关闭函数不得递归调用同一个 Stack 的 Close。 关闭函数 panic 时继续执行其余关闭函数,随后向首次调用者传播第一个 panic。 后续调用返回包含 panic 信息及关闭错误的汇总结果。 超时停止发起后续关闭;正在执行的回调可能继续运行,调用方须随后退出进程。

func (*Stack) Register

func (s *Stack) Register(closeFunc func() error) error

Register 登记一个关闭函数。nil 函数返回 ErrNilCloser;关闭开始后返回 ErrClosed。

Jump to

Keyboard shortcuts

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