handlerregistry

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

Documentation

Overview

Package handlerregistry 为 infra 内的强类型 Handler 注册表共用登记、命名和快照逻辑。 只依赖标准库,不读取配置或管理业务生命周期;公开包负责限制函数签名、包装错误及适配返回类型。 Registry 零值可用,首次使用后不得复制;登记与读取快照可并发,失败登记不改变已有清单。

以下示例位于允许导入本包的 infra 包中,另需导入 context:

type Handler func(context.Context) error

func Heartbeat(context.Context) error {
	return nil
}

func declarations() ([]handlerregistry.Entry[Handler], error) {
	var registry handlerregistry.Registry[Handler]
	if err := registry.Register(Heartbeat, "Cron"); err != nil {
		return nil, err
	}
	return registry.Entries(), nil
}

包级具名函数自动保留原始大小写;方法值、闭包及泛型函数须显式命名。 显式名称不可为空或含首尾空白;nil、非函数、多个名称参数或重名均返回错误。 反射仅在登记时校验函数及推导名称,不反射调用业务。 Entries 保留登记顺序,Snapshot 返回名称映射;空注册表均返回 nil。 快照复制容器,后续登记和调用方修改互不影响,函数捕获的依赖仍由调用方管理。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Entry

type Entry[H any] struct {
	Name    string
	Handler H
}

Entry 将函数绑定到稳定名称;仅表示声明,不管理执行或生命周期。

type Registry

type Registry[H any] struct {
	// contains filtered or unexported fields
}

Registry 为 infra 内的强类型注册表共用登记状态,零值可用。 H 的函数签名由公开包约束;首次使用后不得复制,登记与快照可并发调用。

func (*Registry[H]) Entries

func (r *Registry[H]) Entries() []Entry[H]

Entries 按登记顺序返回独立清单;空注册表返回 nil。

func (*Registry[H]) Register

func (r *Registry[H]) Register(handler H, kind string, name ...string) error

Register 校验并登记函数,kind 仅用于错误上下文,可选 name 最多一个。 失败不改变已有清单;反射仅用于函数校验和取名,不调用业务函数。

func (*Registry[H]) Snapshot

func (r *Registry[H]) Snapshot() map[string]H

Snapshot 返回独立映射;空注册表返回 nil。 两种快照均只复制容器,函数捕获的业务依赖仍由调用方管理。

Jump to

Keyboard shortcuts

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