66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Config 配置结构
|
|
type Config struct {
|
|
Port string `yaml:"port"` // 端口号
|
|
TimerInterval int `yaml:"timer_interval"` // 定时任务间隔
|
|
APIRateLimit int `yaml:"api_rate_limit"` // API请求限制
|
|
CallbackURL string `yaml:"callback_url"` // 回调地址
|
|
NewPrice float64 `yaml:"new_price"` // 新价格
|
|
PlaceholderDownPrice float64 `yaml:"placeholder_down_price"` // 占位降价
|
|
MinShippingFee float64 `yaml:"min_shipping_fee"` // 最低运费
|
|
MinPrice float64 `yaml:"min_price"` // 最低书价
|
|
}
|
|
|
|
// Load 加载配置文件
|
|
func Load(path string) (*Config, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var cfg Config
|
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &cfg, nil
|
|
}
|
|
|
|
// Save 保存配置文件
|
|
func Save(path string, cfg *Config) error {
|
|
data, err := yaml.Marshal(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(path, data, 0644)
|
|
}
|
|
|
|
// GlobalConfig 全局配置
|
|
var (
|
|
_globalConfig *Config
|
|
_globalMu sync.RWMutex
|
|
)
|
|
|
|
// SetGlobal 设置全局配置
|
|
func SetGlobal(cfg *Config) {
|
|
_globalMu.Lock()
|
|
defer _globalMu.Unlock()
|
|
_globalConfig = cfg
|
|
}
|
|
|
|
// GetGlobal 获取全局配置
|
|
func GetGlobal() *Config {
|
|
_globalMu.RLock()
|
|
defer _globalMu.RUnlock()
|
|
return _globalConfig
|
|
}
|