4fe98f2815147c39f9f38b2b7c9b94a47a0cd586
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配置(用于创建Redis客户端)
redisConfig := fac.GetRedisConfig()
// 使用go-redis创建客户端:
// rdb := redis.NewClient(&redis.Options{
// Addr: fmt.Sprintf("%s:%d", redisConfig.Host, redisConfig.Port),
// Password: redisConfig.Password,
// DB: redisConfig.Database,
// })
// 直接获取已初始化的客户端(无需重复实现创建逻辑)
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
Description
Languages
Go
99.3%
Shell
0.7%