修改对象的获取方式
This commit is contained in:
@@ -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.")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user