修改对象的获取方式
This commit is contained in:
117
docs/factory.md
117
docs/factory.md
@@ -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)
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
Reference in New Issue
Block a user