使用 Options 设计模式实现,它可以让我们在服务启动时根据需要选择性地配置应用程序。
可配置项,代码片段:
// ./internal/pkg/core/core.go
type option struct {
enablePProf bool
enableSwagger bool
enablePrometheus bool
enableCors bool
alertNotify proposal.AlertHandler
recordHandler proposal.RecordHandler
}
// WithEnablePProf 启用 pprof
func WithEnablePProf() Option {
return func(opt *option) {
opt.enablePProf = true
}
}
// WithEnableSwagger 启用 swagger
func WithEnableSwagger() Option {
return func(opt *option) {
opt.enableSwagger = true
}
}
// WithEnablePrometheus 启用 prometheus
func WithEnablePrometheus(recordHandler proposal.RecordHandler) Option {
return func(opt *option) {
opt.enablePrometheus = true
opt.recordHandler = recordHandler
}
}
// WithAlertNotify 设置告警通知
func WithAlertNotify(alertHandler proposal.AlertHandler) Option {
return func(opt *option) {
opt.alertNotify = alertHandler
}
}
// WithEnableCors 设置支持跨域
func WithEnableCors() Option {
return func(opt *option) {
opt.enableCors = true
}
}
服务启动,代码片段:
// ./internal/router/router.go
mux, err := core.New(logger,
core.WithEnableCors(),
core.WithEnableSwagger(),
core.WithEnablePProf(),
core.WithAlertNotify(alert.NotifyHandler()),
core.WithEnablePrometheus(metrics.RecordHandler()),
)
通过使用 Options 设计模式,我们可以根据需要选择性地配置服务器参数,使得应用程序更加灵活和可扩展。
有启发,左下角点击“启发”告诉我呀,点我即可直接跳转到小册目录合集 。