165 lines
3.8 KiB
Go
165 lines
3.8 KiB
Go
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"},
|
||
"欢迎",
|
||
"纯文本内容",
|
||
"<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 {
|
||
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("示例执行完成")
|
||
}
|