Help us shape the future of Go! Take the 2026 Go Developer Survey

named

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 3, 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