修改对象的获取方式

This commit is contained in:
2025-11-30 13:50:28 +08:00
parent a655640ab2
commit 7585b8e9da
6 changed files with 279 additions and 73 deletions

View File

@@ -12,7 +12,24 @@
## 使用方法
### 1. 创建工厂实例
### 1. 从配置文件直接创建工厂(推荐)
```go
import "git.toowon.com/jimmy/go-common/factory"
// 直接传入配置文件路径,自动加载配置并创建工厂
fac, err := factory.NewFactoryFromFile("./config.json")
if err != nil {
log.Fatal(err)
}
// 直接获取已初始化的对象
db, _ := fac.GetDatabase() // 直接获取数据库对象
logger, _ := fac.GetLogger() // 直接获取日志对象
emailClient, _ := fac.GetEmailClient() // 直接获取邮件客户端
```
### 2. 从配置对象创建工厂
```go
import (
@@ -30,7 +47,38 @@ if err != nil {
fac := factory.NewFactory(cfg)
```
### 2. 获取邮件客户端(已初始化)
### 3. 获取数据库对象(已初始化,推荐
```go
// 直接获取已初始化的数据库对象(*gorm.DB
db, err := fac.GetDatabase()
if err != nil {
log.Fatal(err)
}
// 直接使用,无需再创建连接
var users []User
db.Find(&users)
db.Create(&user)
```
### 4. 获取Redis配置
```go
// 获取Redis配置用于创建Redis客户端
// 注意Go标准库没有Redis客户端需要调用方使用第三方库创建
redisConfig := fac.GetRedisConfig()
if redisConfig != nil {
// 使用go-redis创建客户端示例
// rdb := redis.NewClient(&redis.Options{
// Addr: fmt.Sprintf("%s:%d", redisConfig.Host, redisConfig.Port),
// Password: redisConfig.Password,
// DB: redisConfig.Database,
// })
}
```
### 5. 获取邮件客户端(已初始化)
```go
// 直接获取已初始化的邮件客户端
@@ -47,7 +95,7 @@ err = emailClient.SendSimple(
)
```
### 3. 获取短信客户端(已初始化)
### 6. 获取短信客户端(已初始化)
```go
// 直接获取已初始化的短信客户端
@@ -63,7 +111,7 @@ resp, err := smsClient.SendSimple(
)
```
### 4. 获取日志记录器(已初始化)
### 7. 获取日志记录器(已初始化)
```go
// 直接获取已初始化的日志记录器
@@ -77,7 +125,7 @@ logger.Info("Application started")
logger.Error("Error occurred: %v", err)
```
### 5. 完整示例
### 8. 完整示例
```go
package main
@@ -150,6 +198,17 @@ func main() {
**返回:** 工厂实例
### NewFactoryFromFile(filePath string) (*Factory, error)
从配置文件直接创建工厂实例(便捷方法)。
**参数:**
- `filePath`: 配置文件路径
**返回:** 工厂实例和错误信息
**说明:** 这是推荐的使用方式,一步完成配置加载和工厂创建。
### (f *Factory) GetEmailClient() (*email.Email, error)
获取邮件客户端(已初始化)。
@@ -174,6 +233,27 @@ func main() {
**说明:** 如果日志配置为nil会使用默认配置创建。
### (f *Factory) GetDatabase() (*gorm.DB, error)
获取数据库连接对象(已初始化)。
**返回:** 已初始化的GORM数据库对象和错误信息
**说明:**
- 支持MySQL、PostgreSQL、SQLite
- 自动配置连接池参数
- 数据库时间统一使用UTC时区
### (f *Factory) GetRedisConfig() *config.RedisConfig
获取Redis配置用于创建Redis客户端
**返回:** Redis配置对象可能为nil
**说明:**
- Go标准库没有Redis客户端需要调用方使用第三方库如go-redis/redis创建
- 返回配置对象调用方可以根据配置创建Redis客户端
### (f *Factory) GetConfig() *config.Config
获取配置对象。
@@ -187,30 +267,33 @@ func main() {
```go
// 调用方需要自己实现创建逻辑
cfg, _ := config.LoadFromFile("./config.json")
emailConfig := cfg.GetEmail()
if emailConfig == nil {
log.Fatal("email config is nil")
}
emailClient, err := email.NewEmail(emailConfig)
dsn, _ := cfg.GetDatabaseDSN()
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
// 配置连接池
sqlDB, _ := db.DB()
sqlDB.SetMaxOpenConns(100)
// 才能使用
emailClient.SendSimple(...)
db.Find(&users)
```
### 使用工厂方式(直接获取已初始化对象)
```go
// 直接获取已初始化的对象,无需重复实现
// 方式1直接从配置文件创建最推荐
fac, _ := factory.NewFactoryFromFile("./config.json")
db, _ := fac.GetDatabase() // 直接获取已初始化的数据库对象
// 直接使用
db.Find(&users)
// 方式2从配置对象创建
cfg, _ := config.LoadFromFile("./config.json")
fac := factory.NewFactory(cfg)
emailClient, err := fac.GetEmailClient()
if err != nil {
log.Fatal(err)
}
db, _ := fac.GetDatabase() // 直接获取已初始化的数据库对象
// 直接使用
emailClient.SendSimple(...)
db.Find(&users)
```
## 注意事项