实际应用
现实世界中的无 switch
设计模式
认证系统示例
type AuthStrategy interface {
Authenticate(credentials string) bool
}
type JWTStrategy struct{}
type OAuthStrategy struct{}
type BasicAuthStrategy struct{}
func (j JWTStrategy) Authenticate(token string) bool {
// JWT 令牌验证逻辑
return len(token) > 30 && strings.Contains(token, ".")
}
func (o OAuthStrategy) Authenticate(code string) bool {
// OAuth 认证逻辑
return len(code) == 36
}
type AuthenticationManager struct {
strategies map[string]AuthStrategy
}
func (am *AuthenticationManager) Validate(method, credentials string) bool {
if strategy, exists := am.strategies[method]; exists {
return strategy.Authenticate(credentials)
}
return false
}
工作流管理模式
graph TD
A[输入请求] --> B{认证}
B -->|有效| C[处理请求]
B -->|无效| D[拒绝请求]
C --> E[生成响应]
错误处理策略
type Result struct {
Success bool
Data interface{}
Error error
}
func executeWithFallback(primary, fallback func() Result) Result {
result := primary()
if!result.Success {
return fallback()
}
return result
}
配置管理
type ConfigLoader interface {
Load() (map[string]string, error)
}
type JSONConfigLoader struct {
Path string
}
type YAMLConfigLoader struct {
Path string
}
func (j JSONConfigLoader) Load() (map[string]string, error) {
// JSON 配置加载
return nil, nil
}
func (y YAMLConfigLoader) Load() (map[string]string, error) {
// YAML 配置加载
return nil, nil
}
性能比较矩阵
策略 |
复杂度 |
灵活性 |
内存使用 |
基于接口 |
高 |
非常高 |
中等 |
映射分派 |
中等 |
高 |
低 |
函数式 |
低 |
中等 |
低 |
高级组合技术
type Middleware func(next func()) func()
func loggingMiddleware(next func()) func() {
return func() {
fmt.Println("执行前")
next()
fmt.Println("执行后")
}
}
func measureExecutionTime(next func()) func() {
return func() {
start := time.Now()
next()
fmt.Printf("执行时间: %v\n", time.Since(start))
}
}
实际用例:事件处理
type EventHandler interface {
Handle(event string) error
}
type UserCreatedHandler struct{}
type PaymentProcessedHandler struct{}
func (u UserCreatedHandler) Handle(event string) error {
// 用户创建逻辑
return nil
}
func (p PaymentProcessedHandler) Handle(event string) error {
// 支付处理逻辑
return nil
}
func processEvent(handlers map[string]EventHandler, eventType string, eventData string) error {
if handler, exists := handlers[eventType]; exists {
return handler.Handle(eventData)
}
return fmt.Errorf("没有针对事件类型的处理器: %s", eventType)
}
LabEx 实际建议
- 利用基于接口的设计以实现最大灵活性
- 实现清晰的关注点分离
- 使用组合而非继承
- 利用函数式编程技术
关键实现策略
- 优先使用接口而非具体实现
- 使用基于映射的分派进行动态路由
- 为横切关注点实现中间件
- 设计时考虑可扩展性和可维护性