- Updated main.go to initialize email service and include it in the dependency injection container. - Refactored handlers to utilize context in service method calls, improving consistency and error handling. - Introduced new service options for upload, security, and captcha services, enhancing modularity and testability. - Removed unused repository implementations to streamline the codebase. This commit continues the effort to improve the architecture by ensuring all services are properly injected and utilized across the application.
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package config
|
||
|
||
import (
|
||
"fmt"
|
||
"sync"
|
||
)
|
||
|
||
var (
|
||
// configInstance 全局配置实例
|
||
configInstance *Config
|
||
// rustFSConfigInstance 全局RustFS配置实例
|
||
rustFSConfigInstance *RustFSConfig
|
||
// once 确保只初始化一次
|
||
once sync.Once
|
||
// initError 初始化错误
|
||
initError error
|
||
)
|
||
|
||
// Init 初始化配置(线程安全,只会执行一次)
|
||
func Init() error {
|
||
once.Do(func() {
|
||
configInstance, initError = Load()
|
||
if initError != nil {
|
||
return
|
||
}
|
||
rustFSConfigInstance = &configInstance.RustFS
|
||
})
|
||
return initError
|
||
}
|
||
|
||
// GetConfig 获取配置实例(线程安全)
|
||
func GetConfig() (*Config, error) {
|
||
if configInstance == nil {
|
||
return nil, fmt.Errorf("配置未初始化,请先调用 config.Init()")
|
||
}
|
||
return configInstance, nil
|
||
}
|
||
|
||
// MustGetConfig 获取配置实例,如果未初始化则panic
|
||
func MustGetConfig() *Config {
|
||
cfg, err := GetConfig()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return cfg
|
||
}
|
||
|
||
// GetRustFSConfig 获取RustFS配置实例(线程安全)
|
||
func GetRustFSConfig() (*RustFSConfig, error) {
|
||
if rustFSConfigInstance == nil {
|
||
return nil, fmt.Errorf("配置未初始化,请先调用 config.Init()")
|
||
}
|
||
return rustFSConfigInstance, nil
|
||
}
|
||
|
||
// MustGetRustFSConfig 获取RustFS配置实例,如果未初始化则panic
|
||
func MustGetRustFSConfig() *RustFSConfig {
|
||
cfg, err := GetRustFSConfig()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return cfg
|
||
}
|
||
|
||
|