3.1 实现服务启动时可选的配置项

基于 Gin 封装的高效 Web 框架新亮2024-1-12 13:43

使用 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 设计模式,我们可以根据需要选择性地配置服务器参数,使得应用程序更加灵活和可扩展。


有启发,左下角点击“启发”告诉我呀,点我即可直接跳转到小册目录合集