package main import ( "fmt" "log" "git.toowon.com/jimmy/go-commom/config" "git.toowon.com/jimmy/go-commom/middleware" // "gorm.io/driver/mysql" // "gorm.io/gorm" ) func main() { // 加载配置文件 cfg, err := config.LoadFromFile("./config/example.json") if err != nil { log.Fatal("Failed to load config:", err) } // 1. 使用数据库配置 fmt.Println("=== Database Config ===") dbConfig := cfg.GetDatabase() if dbConfig != nil { fmt.Printf("Type: %s\n", dbConfig.Type) fmt.Printf("Host: %s:%d\n", dbConfig.Host, dbConfig.Port) fmt.Printf("Database: %s\n", dbConfig.Database) fmt.Printf("User: %s\n", dbConfig.User) } // 获取数据库连接字符串 dsn, err := cfg.GetDatabaseDSN() if err != nil { log.Printf("Failed to get DSN: %v", err) } else { fmt.Printf("DSN: %s\n", dsn) // 实际使用时可以这样连接数据库 // db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // if err != nil { // log.Fatal(err) // } } // 2. 使用OSS配置 fmt.Println("\n=== OSS Config ===") ossConfig := cfg.GetOSS() if ossConfig != nil { fmt.Printf("Provider: %s\n", ossConfig.Provider) fmt.Printf("Endpoint: %s\n", ossConfig.Endpoint) fmt.Printf("Bucket: %s\n", ossConfig.Bucket) fmt.Printf("Region: %s\n", ossConfig.Region) } // 3. 使用Redis配置 fmt.Println("\n=== Redis Config ===") redisConfig := cfg.GetRedis() if redisConfig != nil { fmt.Printf("Host: %s\n", redisConfig.Host) fmt.Printf("Port: %d\n", redisConfig.Port) fmt.Printf("Database: %d\n", redisConfig.Database) } // 获取Redis地址 redisAddr := cfg.GetRedisAddr() fmt.Printf("Redis Address: %s\n", redisAddr) // 4. 使用CORS配置 fmt.Println("\n=== CORS Config ===") corsConfig := cfg.GetCORS() if corsConfig != nil { fmt.Printf("Allowed Origins: %v\n", corsConfig.AllowedOrigins) fmt.Printf("Allowed Methods: %v\n", corsConfig.AllowedMethods) fmt.Printf("Max Age: %d\n", corsConfig.MaxAge) } // 使用CORS配置创建中间件 chain := middleware.NewChain( middleware.CORS(corsConfig), ) fmt.Printf("CORS middleware created: %v\n", chain != nil) // 5. 使用MinIO配置 fmt.Println("\n=== MinIO Config ===") minioConfig := cfg.GetMinIO() if minioConfig != nil { fmt.Printf("Endpoint: %s\n", minioConfig.Endpoint) fmt.Printf("Bucket: %s\n", minioConfig.Bucket) fmt.Printf("UseSSL: %v\n", minioConfig.UseSSL) } // 6. 使用邮件配置 fmt.Println("\n=== Email Config ===") emailConfig := cfg.GetEmail() if emailConfig != nil { fmt.Printf("Host: %s:%d\n", emailConfig.Host, emailConfig.Port) fmt.Printf("From: %s <%s>\n", emailConfig.FromName, emailConfig.From) fmt.Printf("UseTLS: %v\n", emailConfig.UseTLS) } // 7. 使用短信配置 fmt.Println("\n=== SMS Config ===") smsConfig := cfg.GetSMS() if smsConfig != nil { fmt.Printf("Region: %s\n", smsConfig.Region) fmt.Printf("Sign Name: %s\n", smsConfig.SignName) fmt.Printf("Template Code: %s\n", smsConfig.TemplateCode) } // 示例:实际使用配置连接数据库 fmt.Println("\n=== Example: Connect to Database ===") if dbConfig != nil && dbConfig.Type == "mysql" { // 注意:这里只是示例,实际使用时需要确保数据库服务正在运行 // db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // if err != nil { // log.Printf("Failed to connect to database: %v", err) // } else { // fmt.Println("Database connected successfully") // sqlDB, _ := db.DB() // sqlDB.SetMaxOpenConns(dbConfig.MaxOpenConns) // sqlDB.SetMaxIdleConns(dbConfig.MaxIdleConns) // sqlDB.SetConnMaxLifetime(time.Duration(dbConfig.ConnMaxLifetime) * time.Second) // } fmt.Println("Database connection example (commented out)") } }