package email import ( "carrotskin/pkg/config" "fmt" "sync" "go.uber.org/zap" ) var ( // serviceInstance 全局邮件服务实例 serviceInstance *Service // once 确保只初始化一次 once sync.Once // initError 初始化错误 initError error ) // Init 初始化邮件服务(线程安全,只会执行一次) func Init(cfg config.EmailConfig, logger *zap.Logger) error { once.Do(func() { serviceInstance = NewService(cfg, logger) }) return nil } // GetService 获取邮件服务实例(线程安全) func GetService() (*Service, error) { if serviceInstance == nil { return nil, fmt.Errorf("邮件服务未初始化,请先调用 email.Init()") } return serviceInstance, nil } // MustGetService 获取邮件服务实例,如果未初始化则panic func MustGetService() *Service { service, err := GetService() if err != nil { panic(err) } return service }