named

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: 4 Imported by: 0

Documentation

Overview

Package named 提供 infra 内部共用的可关闭客户端命名与默认注册表。 模块保留自己的 NewNamed、Named、NewDefault、Default 和 CloseAll 对外入口, 并负责名称校验。 例如模块内部可按下列方式登记实现 io.Closer 的客户端:

registry := named.New[io.Closer]("example")
client, err := registry.Create("input", func() (io.Closer, error) {
    return io.NopCloser(strings.NewReader("data")), nil
})
if err != nil {
    return err
}
_ = client
return registry.CloseAll()

上例需导入 io、strings 和 github.com/bpcoder16/pixiu/infra/internal/named。 注册表在启动阶段由调用方串行初始化,不并发调用 Create 或 CreateDefault。 所有创建返回后再开始按名称查询;关闭前须先停止使用客户端的任务。 创建不得与 CloseAll 并发。

默认客户端通过 CreateDefault 显式初始化;同一实例也可按名称查询:

registry := named.New[io.Closer]("example")
_, err := registry.CreateDefault("input", func() (io.Closer, error) {
    return io.NopCloser(strings.NewReader("data")), nil
})
if err != nil {
    return err
}
_ = registry.MustDefault()
_ = registry.MustGet("input")
return registry.CloseAll()

默认创建由调用方串行执行,重复初始化在构造前报错;失败可重试。 默认实例仅是命名实例的别名,CloseAll 不重复关闭。默认未初始化或关闭后 查询会 panic;Create 不自动设置默认实例,关闭后不得重新初始化。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Registry

type Registry[T interface{ Close() error }] struct {
	// contains filtered or unexported fields
}

Registry 管理一个模块的可关闭命名客户端及默认引用。 启动阶段由调用方串行初始化;全部初始化完成后再启动业务,停止使用客户端后再关闭。 CloseAll 不与 Create、CreateDefault 并发,否则可能遗漏仍在构造中的客户端。

func New

func New[T interface{ Close() error }](module string) *Registry[T]

New 创建模块专用的命名注册表。

func (*Registry[T]) CloseAll

func (r *Registry[T]) CloseAll() error

CloseAll 关闭所有客户端并汇总错误;并发及重复调用返回同一次结果。

func (*Registry[T]) Create

func (r *Registry[T]) Create(name string, build func() (T, error)) (T, error)

Create 构造并登记客户端。已登记的名称不再构造;构造失败不占用名称。 调用方须在启动阶段串行初始化,未登记成功的客户端立即关闭。 build 须返回新建且由本次调用独占的客户端;返回错误时须自行清理部分资源。 初始化完成后不得再调用;CloseAll 不等待正在构造的客户端。

func (*Registry[T]) CreateDefault

func (r *Registry[T]) CreateDefault(name string, build func() (T, error)) (T, error)

CreateDefault 构造并按 name 登记默认客户端;已有默认实例时不再构造。 默认实例同时在命名表中登记,构造失败或名称冲突不占用默认位置。 调用方须串行执行 Create 和 CreateDefault;build 和生命周期约束与 Create 相同。

func (*Registry[T]) MustDefault

func (r *Registry[T]) MustDefault() T

MustDefault 返回默认客户端;未初始化或关闭开始后 panic。

func (*Registry[T]) MustGet

func (r *Registry[T]) MustGet(name string) T

MustGet 返回命名客户端;不存在或关闭开始后 panic。

Jump to

Keyboard shortcuts

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