将工厂改成黑盒模式,降低用户使用成本
This commit is contained in:
157
README.md
157
README.md
@@ -104,20 +104,27 @@ now := datetime.Now()
|
||||
str := datetime.FormatDateTime(now)
|
||||
```
|
||||
|
||||
#### HTTP响应
|
||||
#### HTTP响应(Handler黑盒模式)
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/http"
|
||||
import (
|
||||
"net/http"
|
||||
commonhttp "git.toowon.com/jimmy/go-common/http"
|
||||
)
|
||||
|
||||
http.Success(w, data)
|
||||
http.SuccessPage(w, list, total, page, pageSize)
|
||||
http.Error(w, 1001, "业务错误")
|
||||
// 使用Handler(黑盒模式)
|
||||
func GetUser(h *commonhttp.Handler) {
|
||||
id := h.GetQueryInt64("id", 0) // 无需传递r
|
||||
h.Success(data) // 无需传递w
|
||||
}
|
||||
|
||||
http.HandleFunc("/user", commonhttp.HandleFunc(GetUser))
|
||||
```
|
||||
|
||||
#### 中间件
|
||||
```go
|
||||
import (
|
||||
"git.toowon.com/jimmy/go-common/middleware"
|
||||
"git.toowon.com/jimmy/go-common/http"
|
||||
commonhttp "git.toowon.com/jimmy/go-common/http"
|
||||
)
|
||||
|
||||
// CORS + 时区中间件
|
||||
@@ -127,8 +134,10 @@ chain := middleware.NewChain(
|
||||
)
|
||||
handler := chain.ThenFunc(yourHandler)
|
||||
|
||||
// 在处理器中获取时区
|
||||
timezone := http.GetTimezone(r)
|
||||
// 在Handler中获取时区
|
||||
func handler(h *commonhttp.Handler) {
|
||||
timezone := h.GetTimezone()
|
||||
}
|
||||
```
|
||||
|
||||
#### 配置管理
|
||||
@@ -144,77 +153,95 @@ redisAddr := cfg.GetRedisAddr()
|
||||
corsConfig := cfg.GetCORS()
|
||||
```
|
||||
|
||||
#### 文件上传和查看
|
||||
#### 文件上传和查看(推荐使用工厂黑盒模式)
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/storage"
|
||||
import (
|
||||
"context"
|
||||
"git.toowon.com/jimmy/go-common/factory"
|
||||
)
|
||||
|
||||
// 创建存储实例
|
||||
fac, _ := factory.NewFactoryFromFile("./config.json")
|
||||
ctx := context.Background()
|
||||
|
||||
// 黑盒模式(推荐,自动选择OSS或MinIO)
|
||||
file, _ := os.Open("test.jpg")
|
||||
url, _ := fac.UploadFile(ctx, "images/test.jpg", file, "image/jpeg")
|
||||
|
||||
// 获取文件URL
|
||||
url, _ := fac.GetFileURL("images/test.jpg", 0) // 永久有效
|
||||
url, _ := fac.GetFileURL("images/test.jpg", 3600) // 1小时后过期
|
||||
|
||||
// 或使用存储处理器(需要HTTP处理器时)
|
||||
storage, _ := storage.NewStorage(storage.StorageTypeOSS, cfg)
|
||||
|
||||
// 创建上传处理器
|
||||
uploadHandler := storage.NewUploadHandler(storage.UploadHandlerConfig{
|
||||
Storage: storage,
|
||||
MaxFileSize: 10 * 1024 * 1024,
|
||||
AllowedExts: []string{".jpg", ".png"},
|
||||
})
|
||||
|
||||
// 创建代理查看处理器
|
||||
proxyHandler := storage.NewProxyHandler(storage)
|
||||
uploadHandler := storage.NewUploadHandler(...)
|
||||
```
|
||||
|
||||
#### 邮件发送
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/email"
|
||||
|
||||
// 从配置创建邮件发送器
|
||||
mailer, _ := email.NewEmail(cfg.GetEmail())
|
||||
|
||||
// 发送邮件
|
||||
mailer.SendSimple(
|
||||
[]string{"recipient@example.com"},
|
||||
"主题",
|
||||
"正文",
|
||||
)
|
||||
```
|
||||
|
||||
#### 短信发送
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/sms"
|
||||
|
||||
// 从配置创建短信发送器
|
||||
smsClient, _ := sms.NewSMS(cfg.GetSMS())
|
||||
|
||||
// 发送短信
|
||||
smsClient.SendSimple(
|
||||
[]string{"13800138000"},
|
||||
map[string]string{"code": "123456"},
|
||||
)
|
||||
```
|
||||
|
||||
#### 使用工厂直接获取客户端(推荐)
|
||||
#### 邮件发送(推荐使用工厂黑盒模式)
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/factory"
|
||||
|
||||
// 方式1:直接从配置文件创建工厂(最推荐)
|
||||
fac, _ := factory.NewFactoryFromFile("./config.json")
|
||||
|
||||
// 直接获取数据库对象(已初始化,可直接使用)
|
||||
db, _ := fac.GetDatabase()
|
||||
db.Find(&users) // 直接使用,无需再创建连接
|
||||
// 黑盒模式(推荐)
|
||||
fac.SendEmail([]string{"user@example.com"}, "主题", "正文")
|
||||
fac.SendEmail([]string{"user@example.com"}, "主题", "纯文本", "<h1>HTML内容</h1>")
|
||||
|
||||
// 直接获取Redis客户端(已初始化,可直接使用)
|
||||
redisClient, _ := fac.GetRedisClient()
|
||||
val, _ := redisClient.Get(ctx, "key").Result()
|
||||
|
||||
// 直接获取已初始化的客户端(无需重复实现创建逻辑)
|
||||
// 或获取客户端对象(需要高级功能时)
|
||||
emailClient, _ := fac.GetEmailClient()
|
||||
smsClient, _ := fac.GetSMSClient()
|
||||
logger, _ := fac.GetLogger()
|
||||
|
||||
// 直接使用
|
||||
emailClient.SendSimple(...)
|
||||
```
|
||||
|
||||
#### 短信发送(推荐使用工厂黑盒模式)
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/factory"
|
||||
|
||||
fac, _ := factory.NewFactoryFromFile("./config.json")
|
||||
|
||||
// 黑盒模式(推荐)
|
||||
fac.SendSMS([]string{"13800138000"}, map[string]string{"code": "123456"})
|
||||
|
||||
// 或获取客户端对象(需要高级功能时)
|
||||
smsClient, _ := fac.GetSMSClient()
|
||||
smsClient.SendSimple(...)
|
||||
logger.Info("Application started")
|
||||
```
|
||||
|
||||
#### 使用工厂(黑盒模式,推荐)
|
||||
```go
|
||||
import (
|
||||
"context"
|
||||
"git.toowon.com/jimmy/go-common/factory"
|
||||
)
|
||||
|
||||
// 从配置文件创建工厂(最推荐)
|
||||
fac, _ := factory.NewFactoryFromFile("./config.json")
|
||||
ctx := context.Background()
|
||||
|
||||
// 日志(黑盒模式,直接调用)
|
||||
fac.LogInfo("用户登录成功")
|
||||
fac.LogError("登录失败: %v", err)
|
||||
|
||||
// 邮件发送(黑盒模式,直接调用)
|
||||
fac.SendEmail([]string{"user@example.com"}, "验证码", "您的验证码是:123456")
|
||||
|
||||
// 短信发送(黑盒模式,直接调用)
|
||||
fac.SendSMS([]string{"13800138000"}, map[string]string{"code": "123456"})
|
||||
|
||||
// 文件上传(黑盒模式,自动选择OSS或MinIO)
|
||||
file, _ := os.Open("test.jpg")
|
||||
url, _ := fac.UploadFile(ctx, "images/test.jpg", file, "image/jpeg")
|
||||
|
||||
// 获取文件URL
|
||||
url, _ := fac.GetFileURL("images/test.jpg", 0) // 永久有效
|
||||
url, _ := fac.GetFileURL("images/test.jpg", 3600) // 1小时后过期
|
||||
|
||||
// Redis操作(黑盒模式,直接调用)
|
||||
fac.RedisSet(ctx, "key", "value", time.Hour)
|
||||
value, _ := fac.RedisGet(ctx, "key")
|
||||
fac.RedisDelete(ctx, "key")
|
||||
|
||||
// 数据库(GORM已经很灵活,直接返回对象)
|
||||
db, _ := fac.GetDatabase()
|
||||
db.Find(&users)
|
||||
```
|
||||
|
||||
更多示例请查看 [examples](./examples/) 目录。
|
||||
|
||||
Reference in New Issue
Block a user