修改对象的获取方式

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

@@ -4,69 +4,86 @@ import (
"fmt"
"log"
"git.toowon.com/jimmy/go-common/config"
"git.toowon.com/jimmy/go-common/factory"
)
func main() {
// 加载配置
cfg, err := config.LoadFromFile("./config/example.json")
// 方式1直接从配置文件创建工厂推荐
fac, err := factory.NewFactoryFromFile("./config/example.json")
if err != nil {
log.Fatal("Failed to load config:", err)
log.Fatal("Failed to create factory:", err)
}
// 创建工厂实例
fac := factory.NewFactory(cfg)
// 直接获取数据库对象(已初始化,可直接使用)
db, err := fac.GetDatabase()
if err != nil {
log.Printf("Database not available: %v", err)
} else {
// 直接使用数据库
var count int64
if err := db.Table("users").Count(&count).Error; err != nil {
log.Printf("Failed to count users: %v", err)
} else {
fmt.Printf("User count: %d\n", count)
}
}
// 示例1获取邮件客户端已初始化可直接使用
fmt.Println("=== Example 1: Get Email Client ===")
// 获取Redis配置用于创建Redis客户端
redisConfig := fac.GetRedisConfig()
if redisConfig != nil {
fmt.Printf("Redis config: %s:%d\n", redisConfig.Host, redisConfig.Port)
// 使用go-redis创建客户端示例
// import "github.com/redis/go-redis/v9"
// rdb := redis.NewClient(&redis.Options{
// Addr: fmt.Sprintf("%s:%d", redisConfig.Host, redisConfig.Port),
// Password: redisConfig.Password,
// DB: redisConfig.Database,
// })
}
// 获取邮件客户端(已初始化,可直接使用)
emailClient, err := fac.GetEmailClient()
if err != nil {
log.Printf("Email client not available: %v", err)
} else {
fmt.Println("Email client created successfully")
// 直接使用,无需再创建
_ = emailClient // 示例中不使用,实际使用时可以直接调用方法
// err = emailClient.SendSimple(
// []string{"recipient@example.com"},
// "测试邮件",
// "这是测试内容",
// )
fmt.Println("Email client is ready to use")
// 直接使用
err = emailClient.SendSimple(
[]string{"recipient@example.com"},
"测试邮件",
"这是测试内容",
)
if err != nil {
log.Printf("Failed to send email: %v", err)
} else {
fmt.Println("Email sent successfully")
}
}
// 示例2获取短信客户端(已初始化,可直接使用)
fmt.Println("\n=== Example 2: Get SMS Client ===")
// 获取短信客户端(已初始化,可直接使用)
smsClient, err := fac.GetSMSClient()
if err != nil {
log.Printf("SMS client not available: %v", err)
} else {
fmt.Println("SMS client created successfully")
// 直接使用,无需再创建
_ = smsClient // 示例中不使用,实际使用时可以直接调用方法
// resp, err := smsClient.SendSimple(
// []string{"13800138000"},
// map[string]string{"code": "123456"},
// )
fmt.Println("SMS client is ready to use")
// 直接使用
resp, err := smsClient.SendSimple(
[]string{"13800138000"},
map[string]string{"code": "123456"},
)
if err != nil {
log.Printf("Failed to send SMS: %v", err)
} else {
fmt.Printf("SMS sent: %s\n", resp.RequestID)
}
}
// 示例3访问配置对象
fmt.Println("\n=== Example 3: Access Config Object ===")
cfgObj := fac.GetConfig()
dsn, err := cfgObj.GetDatabaseDSN()
// 获取日志记录器(已初始化,可直接使用)
logger, err := fac.GetLogger()
if err != nil {
log.Printf("Database DSN not available: %v", err)
log.Printf("Logger not available: %v", err)
} else {
fmt.Printf("Database DSN: %s\n", dsn)
logger.Info("Application started")
logger.Debug("Debug message")
logger.Warn("Warning message")
logger.Error("Error message")
}
redisAddr := cfgObj.GetRedisAddr()
if redisAddr != "" {
fmt.Printf("Redis Address: %s\n", redisAddr)
}
fmt.Println("\nNote: Factory provides initialized clients directly,")
fmt.Println("no need to implement creation logic in your code.")
}