Files

GoCommon 工具类库文档

目录

快速开始

安装

go get git.toowon.com/jimmy/go-common

使用示例

数据库迁移(独立工具,零耦合)

# 1. 复制模板templates/migrate/main.go -> cmd/migrate/main.go
# 2. 创建迁移文件migrations/20240101000001_create_users.sql

# 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

CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT, ...);

优势独立工具零耦合支持命令行参数Docker友好

详细说明:MIGRATION.md

日期转换

推荐方式:通过 factory 使用(黑盒模式)

import "git.toowon.com/jimmy/go-common/factory"

fac, _ := factory.NewFactoryFromFile("config.json")
now := fac.Now("Asia/Shanghai")
str := fac.FormatDateTime(now)

或者直接使用 tools 包:

import "git.toowon.com/jimmy/go-common/tools"

tools.SetDefaultTimeZone(tools.AsiaShanghai)
now := tools.Now()
str := tools.FormatDateTime(now)

HTTP响应Factory黑盒模式推荐

import (
    "net/http"
    "git.toowon.com/jimmy/go-common/factory"
    "git.toowon.com/jimmy/go-common/tools"
)

func GetUser(w http.ResponseWriter, r *http.Request) {
    fac, _ := factory.NewFactoryFromFile("config.json")
    
    // 获取查询参数(使用类型转换方法)
    id := tools.ConvertInt64(r.URL.Query().Get("id"), 0)
    
    // 返回成功响应
    fac.Success(w, data)
}

http.HandleFunc("/user", GetUser)

中间件(生产级配置)

import (
    "time"
    "git.toowon.com/jimmy/go-common/middleware"
    commonhttp "git.toowon.com/jimmy/go-common/http"
)

// 完整的中间件链
chain := middleware.NewChain(
    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)
    timezone := h.GetTimezone()
    h.Success(data)
})

配置管理

import "git.toowon.com/jimmy/go-common/config"

// 从文件加载配置
cfg, err := config.LoadFromFile("./config.json")

// 获取各种配置
dsn, _ := cfg.GetDatabaseDSN()
redisAddr := cfg.GetRedisAddr()
corsConfig := cfg.GetCORS()

版本

v1.0.0

许可证

MIT