feat(config): 添加默认配置文件创建功能

- 实现 createDefaultConfig 方法,在配置文件不存在时自动创建默认配置
- 移除 config.json 中的固定路径配置
- 支持自动创建配置文件目录
- 提供默认的压缩和路由配置
This commit is contained in:
wood chen 2025-03-12 20:50:19 +08:00
parent 7f4a964163
commit 64423b00e2
2 changed files with 47 additions and 13 deletions

View File

@ -23,17 +23,5 @@
"Enabled": false,
"Level": 4
}
},
"FixedPaths": [
{
"Path": "/cdnjs",
"TargetHost": "cdnjs.cloudflare.com",
"TargetURL": "https://cdnjs.cloudflare.com"
},
{
"Path": "/jsdelivr",
"TargetHost": "cdn.jsdelivr.net",
"TargetURL": "https://cdn.jsdelivr.net"
}
]
}
}

View File

@ -3,6 +3,7 @@ package config
import (
"encoding/json"
"os"
"strings"
"sync"
"sync/atomic"
"time"
@ -48,10 +49,55 @@ func Load(path string) (*Config, error) {
once.Do(func() {
instance = &configImpl{}
err = instance.reload(path)
// 如果文件不存在,创建默认配置并重新加载
if err != nil && os.IsNotExist(err) {
if createErr := createDefaultConfig(path); createErr == nil {
err = instance.reload(path)
} else {
err = createErr
}
}
})
return &instance.Config, err
}
// createDefaultConfig 创建默认配置文件
func createDefaultConfig(path string) error {
// 创建目录(如果不存在)
dir := path[:strings.LastIndex(path, "/")]
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
// 创建默认配置
defaultConfig := Config{
MAP: map[string]PathConfig{
"/": {
DefaultTarget: "http://localhost:8080",
},
},
Compression: CompressionConfig{
Gzip: CompressorConfig{
Enabled: true,
Level: 6,
},
Brotli: CompressorConfig{
Enabled: true,
Level: 6,
},
},
}
// 序列化为JSON
data, err := json.MarshalIndent(defaultConfig, "", " ")
if err != nil {
return err
}
// 写入文件
return os.WriteFile(path, data, 0644)
}
// RegisterUpdateCallback 注册配置更新回调函数
func RegisterUpdateCallback(callback func(*Config)) {
callbackMutex.Lock()