Files
go-common/examples/config_example.go
2025-11-30 13:43:43 +08:00

125 lines
3.7 KiB
Go

package main
import (
"fmt"
"log"
"git.toowon.com/jimmy/go-common/config"
"git.toowon.com/jimmy/go-common/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)")
}
}