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 (*Registry[T]) Create ¶
Create 构造并登记客户端。已登记的名称不再构造;构造失败不占用名称。 调用方须在启动阶段串行初始化,未登记成功的客户端立即关闭。 build 须返回新建且由本次调用独占的客户端;返回错误时须自行清理部分资源。 初始化完成后不得再调用;CloseAll 不等待正在构造的客户端。
func (*Registry[T]) CreateDefault ¶
CreateDefault 构造并按 name 登记默认客户端;已有默认实例时不再构造。 默认实例同时在命名表中登记,构造失败或名称冲突不占用默认位置。 调用方须串行执行 Create 和 CreateDefault;build 和生命周期约束与 Create 相同。
func (*Registry[T]) MustDefault ¶
func (r *Registry[T]) MustDefault() T
MustDefault 返回默认客户端;未初始化或关闭开始后 panic。