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

服务配置 设计模式 代码优化
文章介绍了如何使用 Options 设计模式在服务启动时选择性配置应用程序。通过定义 `option` 结构体和一系列 `With` 开头的函数,开发者可以根据需求启用或配置不同的功能,如 pprof、Swagger、Prometheus、跨域支持和告警通知。这种设计模式使得应用程序的配置更加灵活和可扩展,提升了代码的可维护性和可读性。
文章内容
思维导图
常见问题
社交分享

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


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

思维导图生成中,请稍候...

问题 1: 什么是 Options 设计模式?
回答: Options 设计模式是一种允许在服务启动时根据需要选择性地配置应用程序的设计模式,它通过提供一系列可配置项来增强代码的灵活性和可扩展性。

问题 2: 如何在服务启动时启用 pprof?
回答: 可以通过调用 WithEnablePProf() 函数来启用 pprof,该函数会将 enablePProf 配置项设置为 true

问题 3: 如何启用 Swagger 文档支持?
回答: 可以通过调用 WithEnableSwagger() 函数来启用 Swagger 文档支持,该函数会将 enableSwagger 配置项设置为 true

问题 4: 如何配置 Prometheus 监控?
回答: 可以通过调用 WithEnablePrometheus(recordHandler) 函数来启用 Prometheus 监控,并传入一个 recordHandler 来处理监控数据。

问题 5: 如何设置告警通知?
回答: 可以通过调用 WithAlertNotify(alertHandler) 函数来设置告警通知,并传入一个 alertHandler 来处理告警事件。

问题 6: 如何启用跨域支持?
回答: 可以通过调用 WithEnableCors() 函数来启用跨域支持,该函数会将 enableCors 配置项设置为 true

问题 7: Options 设计模式的优势是什么?
回答: Options 设计模式的优势在于它允许在服务启动时根据需要灵活地配置应用程序,避免了硬编码配置,使代码更易于维护和扩展。

问题 8: 在服务启动时如何同时启用多个配置项?
回答: 可以在服务启动时依次调用多个配置函数,例如 WithEnableCors()WithEnableSwagger()WithEnablePProf(),来同时启用多个配置项。

问题 9: 为什么需要传入 recordHandler 来启用 Prometheus 监控?
回答: 传入 recordHandler 是为了处理 Prometheus 监控的数据记录,确保监控数据能够被正确地收集和处理。

问题 10: 如何确保配置项在服务启动时生效?
回答: 通过在服务启动时调用相应的配置函数,并将它们作为参数传递给核心初始化函数(如 core.New()),可以确保配置项在服务启动时生效。