2.2 KiB
2.2 KiB
UserService 初始化说明
项目结构
backend/
├── pkg/
│ ├── database/ # 数据库连接包(可复用)
│ │ └── database.go
│ └── models/ # 数据模型包
│ └── user.go
└── services/
└── userService/
├── main.go
├── go.mod
└── README.md
设计说明
1. 数据库连接独立出来(推荐)
为什么独立出来:
- ✅ 可复用:其他服务(Asset Service、Social Service等)也可以使用
- ✅ 便于管理:统一管理连接池配置、重连逻辑等
- ✅ 便于测试:可以轻松mock数据库连接
- ✅ 符合分层架构:基础设施层与业务逻辑层分离
2. 项目结构
pkg/database/ - 数据库基础设施层(可复用)
pkg/models/ - 数据模型定义
services/ - 业务服务层
安装依赖
在根目录执行:
cd /Users/haihuizhu/infinite_matrix/top-fans/backend
# 添加GORM依赖
go get gorm.io/gorm
go get gorm.io/driver/postgres
# 整理依赖
go mod tidy
使用方式
在任何服务中使用数据库连接:
import (
"github.com/topfans/backend/pkg/database"
"github.com/topfans/backend/pkg/models"
)
// 初始化数据库
config := database.Config{
Host: "localhost",
Port: 5432,
User: "haihuizhu",
Password: "admin",
DBName: "top-fans",
SSLMode: "disable",
TimeZone: "Asia/Shanghai",
}
if err := database.Init(config); err != nil {
log.Fatal(err)
}
// 使用数据库
db := database.GetDB()
var user models.User
db.Where("mobile = ?", "13800000000").First(&user)
注意事项
- 连接池配置:已在
pkg/database/database.go中配置了合理的连接池参数 - 时区处理:统一使用UTC时间,在存储时转换为毫秒时间戳
- 软删除:User模型支持软删除(DeletedAt字段)
- 自动迁移:启动时会自动创建/更新表结构
后续开发
- 实现Repository层(数据访问层)
- 实现Service层(业务逻辑层)
- 实现gRPC Handler层(API接口层)