2025-11-28 23:30:49 +08:00
|
|
|
|
package storage
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"carrotskin/pkg/config"
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"sync"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
|
// clientInstance 全局存储客户端实例
|
|
|
|
|
|
clientInstance *StorageClient
|
|
|
|
|
|
// once 确保只初始化一次
|
|
|
|
|
|
once sync.Once
|
|
|
|
|
|
// initError 初始化错误
|
|
|
|
|
|
initError error
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// Init 初始化存储客户端(线程安全,只会执行一次)
|
|
|
|
|
|
func Init(cfg config.RustFSConfig) error {
|
|
|
|
|
|
once.Do(func() {
|
|
|
|
|
|
clientInstance, initError = NewStorage(cfg)
|
|
|
|
|
|
if initError != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
return initError
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// GetClient 获取存储客户端实例(线程安全)
|
|
|
|
|
|
func GetClient() (*StorageClient, error) {
|
|
|
|
|
|
if clientInstance == nil {
|
|
|
|
|
|
return nil, fmt.Errorf("存储客户端未初始化,请先调用 storage.Init()")
|
|
|
|
|
|
}
|
|
|
|
|
|
return clientInstance, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// MustGetClient 获取存储客户端实例,如果未初始化则panic
|
|
|
|
|
|
func MustGetClient() *StorageClient {
|
|
|
|
|
|
client, err := GetClient()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
panic(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return client
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-12-02 22:52:33 +08:00
|
|
|
|
|