package network import ( "encoding/json" "fmt" "net/http" "time" "github.com/wuko233/sysmonitord/internal/config" ) type ConfigLoader struct { client *http.Client } func NewConfigLoader() *ConfigLoader { return &ConfigLoader{ client: &http.Client{ Timeout: 10 * time.Second, }, } } func (l *ConfigLoader) LoadConfigs(urls ConfigUrls) (config.OfficialConfig, config.UserConfig, error) { var official config.OfficialConfig var user config.UserConfig // 1. 下载官方配置 if err := l.fetchJSON(urls.OfficialConfigUrl, &official); err != nil { return official, user, fmt.Errorf("下载官方配置失败: %v", err) } // 2. 下载用户配置 if err := l.fetchJSON(urls.UserConfigUrl, &user); err != nil { return official, user, fmt.Errorf("下载用户配置失败: %v", err) } return official, user, nil } func (l *ConfigLoader) fetchJSON(url string, target interface{}) error { resp, err := l.client.Get(url) if err != nil { return fmt.Errorf("请求失败: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return fmt.Errorf("非200响应: %d", resp.StatusCode) } return json.NewDecoder(resp.Body).Decode(target) }