package main import ( "context" "fmt" "log" "os" "time" "git.toowon.com/jimmy/go-common/factory" ) func main() { // 方式1:直接从配置文件创建工厂(推荐) fac, err := factory.NewFactoryFromFile("./config/example.json") if err != nil { log.Fatal("Failed to create factory:", err) } ctx := context.Background() // ========== 日志记录(黑盒模式,推荐) ========== fac.LogInfo("应用启动") fac.LogDebug("调试信息: %s", "test") fac.LogWarn("警告信息") fac.LogError("错误信息: %v", fmt.Errorf("test error")) // 带字段的日志 fac.LogInfof(map[string]interface{}{ "user_id": 123, "ip": "192.168.1.1", }, "用户登录成功") fac.LogErrorf(map[string]interface{}{ "error_code": 1001, "user_id": 123, }, "登录失败: %v", fmt.Errorf("invalid password")) // ========== 邮件发送(黑盒模式,推荐) ========== err = fac.SendEmail( []string{"user@example.com"}, "验证码", "您的验证码是:123456", ) if err != nil { fac.LogError("发送邮件失败: %v", err) } else { fac.LogInfo("邮件发送成功") } // HTML邮件 err = fac.SendEmail( []string{"user@example.com"}, "欢迎", "纯文本内容", "

HTML内容

", ) if err != nil { fac.LogError("发送HTML邮件失败: %v", err) } // ========== 短信发送(黑盒模式,推荐) ========== resp, err := fac.SendSMS( []string{"13800138000"}, map[string]string{"code": "123456"}, ) if err != nil { fac.LogError("发送短信失败: %v", err) } else { fac.LogInfo("短信发送成功: %s", resp.RequestID) } // 指定模板代码 resp, err = fac.SendSMS( []string{"13800138000"}, map[string]string{"code": "123456"}, "SMS_123456789", // 模板代码 ) if err != nil { fac.LogError("发送短信失败: %v", err) } // ========== 文件上传(黑盒模式,推荐,自动选择OSS或MinIO) ========== file, err := os.Open("test.jpg") if err == nil { defer file.Close() url, err := fac.UploadFile(ctx, "images/test.jpg", file, "image/jpeg") if err != nil { fac.LogError("上传文件失败: %v", err) } else { fac.LogInfo("文件上传成功: %s", url) } } // ========== 获取文件URL(黑盒模式) ========== // 永久有效 url, err := fac.GetFileURL("images/test.jpg", 0) if err != nil { fac.LogError("获取文件URL失败: %v", err) } else { fac.LogInfo("文件URL: %s", url) } // 临时访问URL(1小时后过期) url, err = fac.GetFileURL("images/test.jpg", 3600) if err != nil { fac.LogError("获取临时URL失败: %v", err) } else { fac.LogInfo("临时URL: %s", url) } // ========== Redis操作(黑盒模式,推荐) ========== // 设置值(不过期) err = fac.RedisSet(ctx, "user:123", "value") if err != nil { fac.LogError("Redis设置失败: %v", err) } // 设置值(带过期时间) err = fac.RedisSet(ctx, "user:123", "value", time.Hour) if err != nil { fac.LogError("Redis设置失败: %v", err) } // 获取值 value, err := fac.RedisGet(ctx, "user:123") if err != nil { fac.LogError("Redis获取失败: %v", err) } else { fac.LogInfo("Redis值: %s", value) } // 删除键 err = fac.RedisDelete(ctx, "user:123", "user:456") if err != nil { fac.LogError("Redis删除失败: %v", err) } // 检查键是否存在 exists, err := fac.RedisExists(ctx, "user:123") if err != nil { fac.LogError("Redis检查失败: %v", err) } else { fac.LogInfo("键是否存在: %v", exists) } // ========== 数据库操作 ========== db, err := fac.GetDatabase() if err != nil { fac.LogError("数据库连接失败: %v", err) } else { // 直接使用GORM var count int64 if err := db.Table("users").Count(&count).Error; err != nil { fac.LogError("查询用户数量失败: %v", err) } else { fac.LogInfo("用户数量: %d", count) } } fac.LogInfo("示例执行完成") }