139 lines
4.0 KiB
Go
139 lines
4.0 KiB
Go
//go:build example
|
|
// +build example
|
|
|
|
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 ===")
|
|
configCORS := cfg.GetCORS()
|
|
if configCORS != nil {
|
|
fmt.Printf("Allowed Origins: %v\n", configCORS.AllowedOrigins)
|
|
fmt.Printf("Allowed Methods: %v\n", configCORS.AllowedMethods)
|
|
fmt.Printf("Max Age: %d\n", configCORS.MaxAge)
|
|
}
|
|
|
|
// 使用CORS配置创建中间件
|
|
var middlewareCORS *middleware.CORSConfig
|
|
if configCORS != nil {
|
|
middlewareCORS = middleware.NewCORSConfig(
|
|
configCORS.AllowedOrigins,
|
|
configCORS.AllowedMethods,
|
|
configCORS.AllowedHeaders,
|
|
configCORS.ExposedHeaders,
|
|
configCORS.AllowCredentials,
|
|
configCORS.MaxAge,
|
|
)
|
|
}
|
|
chain := middleware.NewChain(
|
|
middleware.CORS(middlewareCORS),
|
|
)
|
|
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)")
|
|
}
|
|
}
|