package sms import "gotest/internal/config" // Sender 短信发送接口,统一抽象不同短信通道的发送行为 type Sender interface { // Send 向指定手机号发送验证码 Send(phone string, code string) error } // NewSender 根据配置创建短信发送实例 // 规则:DevMode 为 true 时无论 Provider 是什么都返回 MockSender; // 否则按 Provider 返回 aliyun/tencent,默认 mock。 func NewSender(cfg *config.SMSConfig) Sender { // 开发模式直接返回 MockSender,不真实发送 if cfg.DevMode { return &MockSender{} } // 根据 Provider 选择具体短信通道 switch cfg.Provider { case "aliyun": return NewAliyunSender(&cfg.Aliyun) case "tencent": return NewTencentSender(&cfg.Tencent) default: // 未识别的 Provider 默认使用 mock,避免配置错误导致服务不可用 return &MockSender{} } }