callbacks

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Aug 8, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package callbacks 提供非侵入的执行切面:在某个执行单元的开始/结束/出错时机 触发回调,用于统一注入可观测性(trace、metrics、日志)而不改动业务代码。

业务侧只需在入口/出口埋三个调用:

func (s *svc) Do(ctx context.Context, in Input) (Output, error) {
    info := &callbacks.RunInfo{Name: "Do", Component: "svc"}
    ctx = callbacks.OnStart(ctx, info, in)
    out, err := s.do(ctx, in)
    if err != nil {
        callbacks.OnError(ctx, info, err)
        return out, err
    }
    callbacks.OnEnd(ctx, info, out)
    return out, nil
}

观测侧注册 Handler(全局或随 ctx 局部),无需感知业务:

h := callbacks.NewHandlerBuilder().
    OnStart(func(ctx context.Context, info *callbacks.RunInfo, input any) context.Context {
        return context.WithValue(ctx, startKey{}, time.Now())
    }).
    OnEnd(func(ctx context.Context, info *callbacks.RunInfo, output any) context.Context {
        cost := time.Since(ctx.Value(startKey{}).(time.Time))
        metrics.Observe(info.Name, cost)
        return ctx
    }).
    Build()
callbacks.AppendGlobalHandlers(h)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AppendGlobalHandlers

func AppendGlobalHandlers(hs ...Handler)

AppendGlobalHandlers 注册全局 handler(观测所有埋点)。通常在程序启动时调用一次。

func OnEnd

func OnEnd(ctx context.Context, info *RunInfo, output any) context.Context

OnEnd 触发所有生效 handler 的 OnEnd。

func OnError

func OnError(ctx context.Context, info *RunInfo, err error) context.Context

OnError 触发所有生效 handler 的 OnError。

func OnStart

func OnStart(ctx context.Context, info *RunInfo, input any) context.Context

OnStart 触发所有生效 handler 的 OnStart,返回串联后的 ctx。

func WithHandlers

func WithHandlers(ctx context.Context, hs ...Handler) context.Context

WithHandlers 把局部 handler 附加到 ctx;它们与全局 handler 合并生效, 作用范围为该 ctx 派生的调用链。

Types

type EndFn

type EndFn func(ctx context.Context, info *RunInfo, output any) context.Context

StartFn / EndFn / ErrorFn 是各时机的回调函数签名。

type ErrorFn

type ErrorFn func(ctx context.Context, info *RunInfo, err error) context.Context

StartFn / EndFn / ErrorFn 是各时机的回调函数签名。

type Handler

type Handler interface {
	OnStart(ctx context.Context, info *RunInfo, input any) context.Context
	OnEnd(ctx context.Context, info *RunInfo, output any) context.Context
	OnError(ctx context.Context, info *RunInfo, err error) context.Context
}

Handler 是切面回调处理器。每个方法返回(可能被修改的)ctx, 供同一 handler 在后续时机间传递状态(如开始时间)。

type HandlerBuilder

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

HandlerBuilder 用函数快速构建 Handler。只设置需要的时机即可; 构建出的 Handler 会实现 TimingChecker,自动跳过未设置的时机(零开销)。

func NewHandlerBuilder

func NewHandlerBuilder() *HandlerBuilder

NewHandlerBuilder 创建一个 HandlerBuilder。

func (*HandlerBuilder) Build

func (b *HandlerBuilder) Build() Handler

Build 构建 Handler。

func (*HandlerBuilder) OnEnd

func (b *HandlerBuilder) OnEnd(fn EndFn) *HandlerBuilder

OnEnd 设置结束时机回调。

func (*HandlerBuilder) OnError

func (b *HandlerBuilder) OnError(fn ErrorFn) *HandlerBuilder

OnError 设置出错时机回调。

func (*HandlerBuilder) OnStart

func (b *HandlerBuilder) OnStart(fn StartFn) *HandlerBuilder

OnStart 设置开始时机回调。

type RunInfo

type RunInfo struct {
	Name      string // 实例/方法名
	Type      string // 类型名
	Component string // 组件类别(如 "http" / "grpc" / "svc")
}

RunInfo 描述被观测的执行单元。

type StartFn

type StartFn func(ctx context.Context, info *RunInfo, input any) context.Context

StartFn / EndFn / ErrorFn 是各时机的回调函数签名。

type Timing

type Timing int

Timing 表示回调时机。

const (
	TimingStart Timing = iota
	TimingEnd
	TimingError
)

type TimingChecker

type TimingChecker interface {
	Needed(ctx context.Context, info *RunInfo, timing Timing) bool
}

TimingChecker 是 Handler 可选实现的接口:声明自己关心哪些时机, 框架据此跳过不需要的回调,降低开销。未实现则视为关心所有时机。

Jump to

Keyboard shortcuts

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