2026-04-06 17:08:51 +08:00

36 lines
793 B
Go

package app
import (
"context"
"fmt"
)
// ReadinessChecker 定义统一的就绪检查能力。
type ReadinessChecker interface {
Ready(ctx context.Context) error
}
type readinessGroup struct {
checkers []namedChecker
}
type namedChecker struct {
name string
check func(context.Context) error
}
// newReadinessGroup 创建一个按顺序执行的就绪检查器组合。
func newReadinessGroup(checkers ...namedChecker) ReadinessChecker {
return readinessGroup{checkers: checkers}
}
// Ready 逐个执行检查,只要有一个失败就返回未就绪。
func (g readinessGroup) Ready(ctx context.Context) error {
for _, checker := range g.checkers {
if err := checker.check(ctx); err != nil {
return fmt.Errorf("%s not ready: %w", checker.name, err)
}
}
return nil
}