Files
go-common/README.md

6.1 KiB
Raw Permalink Blame History

GoCommon - Go通用工具类库

这是一个Go语言开发的通用工具类库为其他Go项目提供常用的工具方法集合。

功能模块

1. 数据库迁移工具 (migration)

提供数据库迁移功能支持MySQL、PostgreSQL、SQLite等数据库。

2. 日期转换工具 (datetime)

提供日期时间转换功能,支持时区设定和多种格式转换。

3. HTTP Restful工具 (http)

提供HTTP请求/响应处理工具包含标准化的响应结构、分页支持和HTTP状态码与业务状态码的分离。

4. 中间件工具 (middleware)

提供常用的HTTP中间件包括CORS处理和时区管理。

5. 配置工具 (config)

提供从外部文件加载配置的功能支持数据库、OSS、Redis、CORS、MinIO等配置。

6. 存储工具 (storage)

提供文件上传和查看功能支持OSS和MinIO两种存储方式并提供HTTP处理器。

7. 邮件工具 (email)

提供SMTP邮件发送功能支持纯文本和HTML邮件使用Go标准库实现。

8. 短信工具 (sms)

提供阿里云短信发送功能支持模板短信和批量发送使用Go标准库实现。

9. 工厂工具 (factory)

提供从配置文件直接创建已初始化客户端对象的功能包括数据库、Redis、邮件、短信、日志等避免调用方重复实现创建逻辑。

10. 日志工具 (logger)

提供统一的日志记录功能支持多种日志级别和输出方式使用Go标准库实现。

安装

1. 配置私有仓库(重要)

由于本项目使用私有 Git 仓库,需要先配置 GOPRIVATE 环境变量:

# 使用 go env 命令配置(推荐,永久生效)
go env -w GOPRIVATE=git.toowon.com

# 验证配置
go env GOPRIVATE

详细配置说明请参考 SETUP.md

遇到问题?请查看 故障排除指南

2. 安装模块

# 安装最新版本(推荐用于开发)
go get git.toowon.com/jimmy/go-common@latest

# 安装特定版本(推荐用于生产)
go get git.toowon.com/jimmy/go-common@v1.0.0

版本管理说明请参考 VERSION.md

使用示例

详细的使用说明请参考各模块的文档:

快速示例

数据库迁移

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

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()

日期转换

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

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

HTTP响应

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

http.Success(w, data)
http.SuccessPage(w, list, total, page, pageSize)
http.Error(w, 1001, "业务错误")

中间件

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

// CORS + 时区中间件
chain := middleware.NewChain(
    middleware.CORS(),
    middleware.Timezone,
)
handler := chain.ThenFunc(yourHandler)

// 在处理器中获取时区
timezone := http.GetTimezone(r)

配置管理

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

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

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

文件上传和查看

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

// 创建存储实例
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)

邮件发送

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

// 从配置创建邮件发送器
mailer, _ := email.NewEmail(cfg.GetEmail())

// 发送邮件
mailer.SendSimple(
    []string{"recipient@example.com"},
    "主题",
    "正文",
)

短信发送

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

// 从配置创建短信发送器
smsClient, _ := sms.NewSMS(cfg.GetSMS())

// 发送短信
smsClient.SendSimple(
    []string{"13800138000"},
    map[string]string{"code": "123456"},
)

使用工厂直接获取客户端(推荐)

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

// 方式1直接从配置文件创建工厂最推荐
fac, _ := factory.NewFactoryFromFile("./config.json")

// 直接获取数据库对象(已初始化,可直接使用)
db, _ := fac.GetDatabase()
db.Find(&users)  // 直接使用,无需再创建连接

// 直接获取Redis客户端已初始化可直接使用
redisClient, _ := fac.GetRedisClient()
val, _ := redisClient.Get(ctx, "key").Result()

// 直接获取已初始化的客户端(无需重复实现创建逻辑)
emailClient, _ := fac.GetEmailClient()
smsClient, _ := fac.GetSMSClient()
logger, _ := fac.GetLogger()

// 直接使用
emailClient.SendSimple(...)
smsClient.SendSimple(...)
logger.Info("Application started")

更多示例请查看 examples 目录。

版本管理

当前版本:v1.0.0

如何指定版本

go.mod 文件中指定版本:

require (
    git.toowon.com/jimmy/go-common v1.0.0
)

或者使用命令行:

# 使用最新版本
go get git.toowon.com/jimmy/go-common@latest

# 使用特定版本
go get git.toowon.com/jimmy/go-common@v1.0.0

详细版本管理说明请参考 VERSION.md