将工厂改成黑盒模式,降低用户使用成本
This commit is contained in:
@@ -4,9 +4,10 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.toowon.com/jimmy/go-common/factory"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -16,80 +17,148 @@ func main() {
|
||||
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"},
|
||||
"欢迎",
|
||||
"纯文本内容",
|
||||
"<h1>HTML内容</h1>",
|
||||
)
|
||||
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 {
|
||||
log.Printf("Database not available: %v", err)
|
||||
fac.LogError("数据库连接失败: %v", err)
|
||||
} else {
|
||||
// 直接使用数据库
|
||||
// 直接使用GORM
|
||||
var count int64
|
||||
if err := db.Table("users").Count(&count).Error; err != nil {
|
||||
log.Printf("Failed to count users: %v", err)
|
||||
fac.LogError("查询用户数量失败: %v", err)
|
||||
} else {
|
||||
fmt.Printf("User count: %d\n", count)
|
||||
fac.LogInfo("用户数量: %d", count)
|
||||
}
|
||||
}
|
||||
|
||||
// 直接获取Redis客户端(已初始化,可直接使用)
|
||||
redisClient, err := fac.GetRedisClient()
|
||||
if err != nil {
|
||||
log.Printf("Redis not available: %v", err)
|
||||
} else {
|
||||
// 直接使用Redis客户端
|
||||
ctx := context.Background()
|
||||
val, err := redisClient.Get(ctx, "test_key").Result()
|
||||
if err != nil && err != redis.Nil {
|
||||
log.Printf("Redis error: %v", err)
|
||||
} else if err == redis.Nil {
|
||||
fmt.Println("Redis key not found")
|
||||
} else {
|
||||
fmt.Printf("Redis value: %s\n", val)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取邮件客户端(已初始化,可直接使用)
|
||||
emailClient, err := fac.GetEmailClient()
|
||||
if err != nil {
|
||||
log.Printf("Email client not available: %v", err)
|
||||
} else {
|
||||
// 直接使用
|
||||
err = emailClient.SendSimple(
|
||||
[]string{"recipient@example.com"},
|
||||
"测试邮件",
|
||||
"这是测试内容",
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("Failed to send email: %v", err)
|
||||
} else {
|
||||
fmt.Println("Email sent successfully")
|
||||
}
|
||||
}
|
||||
|
||||
// 获取短信客户端(已初始化,可直接使用)
|
||||
smsClient, err := fac.GetSMSClient()
|
||||
if err != nil {
|
||||
log.Printf("SMS client not available: %v", err)
|
||||
} else {
|
||||
// 直接使用
|
||||
resp, err := smsClient.SendSimple(
|
||||
[]string{"13800138000"},
|
||||
map[string]string{"code": "123456"},
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("Failed to send SMS: %v", err)
|
||||
} else {
|
||||
fmt.Printf("SMS sent: %s\n", resp.RequestID)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取日志记录器(已初始化,可直接使用)
|
||||
logger, err := fac.GetLogger()
|
||||
if err != nil {
|
||||
log.Printf("Logger not available: %v", err)
|
||||
} else {
|
||||
logger.Info("Application started")
|
||||
logger.Debug("Debug message")
|
||||
logger.Warn("Warning message")
|
||||
logger.Error("Error message")
|
||||
}
|
||||
fac.LogInfo("示例执行完成")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user