调整工具类的方法,优化方法调用及增加迁移工具及其用法
This commit is contained in:
@@ -3,9 +3,10 @@
|
||||
## 目录
|
||||
|
||||
- [数据库迁移工具](./migration.md) - 数据库版本管理和迁移
|
||||
- [完整使用指南](../MIGRATION.md) ⭐ - 独立工具,零耦合,Docker友好
|
||||
- [日期转换工具](./datetime.md) - 日期时间处理和时区转换
|
||||
- [HTTP Restful工具](./http.md) - HTTP请求响应处理和分页
|
||||
- [中间件工具](./middleware.md) - CORS和时区处理中间件
|
||||
- [中间件工具](./middleware.md) - 生产级HTTP中间件(CORS、时区、日志、Recovery、限流)
|
||||
- [配置工具](./config.md) - 外部配置文件加载和管理
|
||||
- [存储工具](./storage.md) - 文件上传和查看(OSS、MinIO)
|
||||
- [邮件工具](./email.md) - SMTP邮件发送
|
||||
@@ -23,22 +24,37 @@ go get git.toowon.com/jimmy/go-common
|
||||
|
||||
### 使用示例
|
||||
|
||||
#### 数据库迁移
|
||||
#### 数据库迁移(独立工具,零耦合)
|
||||
|
||||
```go
|
||||
import "git.toowon.com/jimmy/go-common/migration"
|
||||
```bash
|
||||
# 1. 复制模板:templates/migrate/main.go -> cmd/migrate/main.go
|
||||
# 2. 创建迁移文件:migrations/20240101000001_create_users.sql
|
||||
|
||||
migrator := migration.NewMigrator(db)
|
||||
migrator.AddMigration(migration.Migration{
|
||||
Version: "20240101000001",
|
||||
Description: "create_users_table",
|
||||
Up: func(db *gorm.DB) error {
|
||||
return db.Exec("CREATE TABLE users ...").Error
|
||||
},
|
||||
})
|
||||
migrator.Up()
|
||||
# 3. 开发环境
|
||||
go run cmd/migrate/main.go up
|
||||
|
||||
# 4. 生产环境(编译后使用,推荐)
|
||||
go build -o bin/migrate cmd/migrate/main.go
|
||||
./bin/migrate up # 使用默认配置
|
||||
./bin/migrate up -config /path/to/config.json # 指定配置
|
||||
./bin/migrate status # 查看状态
|
||||
|
||||
# 5. Docker(挂载配置,修改无需重启)
|
||||
# docker-compose.yml:
|
||||
# volumes:
|
||||
# - ./config.json:/app/config.json:ro
|
||||
# command: sh -c "./migrate up && ./server"
|
||||
```
|
||||
|
||||
**迁移文件示例**(`migrations/20240101000001_create_users.sql`):
|
||||
```sql
|
||||
CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT, ...);
|
||||
```
|
||||
|
||||
**优势**:独立工具,零耦合,支持命令行参数,Docker友好
|
||||
|
||||
详细说明:[MIGRATION.md](../MIGRATION.md)
|
||||
|
||||
#### 日期转换
|
||||
|
||||
```go
|
||||
@@ -65,24 +81,26 @@ func GetUser(h *commonhttp.Handler) {
|
||||
http.HandleFunc("/user", commonhttp.HandleFunc(GetUser))
|
||||
```
|
||||
|
||||
#### 中间件
|
||||
#### 中间件(生产级配置)
|
||||
|
||||
```go
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
"git.toowon.com/jimmy/go-common/middleware"
|
||||
commonhttp "git.toowon.com/jimmy/go-common/http"
|
||||
)
|
||||
|
||||
// CORS + 时区中间件
|
||||
// 完整的中间件链
|
||||
chain := middleware.NewChain(
|
||||
middleware.CORS(),
|
||||
middleware.Timezone,
|
||||
middleware.Recovery(nil), // Panic恢复
|
||||
middleware.Logging(nil), // 请求日志
|
||||
middleware.RateLimitByIP(100, time.Minute), // 限流
|
||||
middleware.CORS(nil), // CORS
|
||||
middleware.Timezone, // 时区
|
||||
)
|
||||
|
||||
handler := chain.ThenFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
h := commonhttp.NewHandler(w, r)
|
||||
// 在Handler中获取时区
|
||||
timezone := h.GetTimezone()
|
||||
h.Success(data)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user