package main import ( "encoding/json" "io" "net/http" "time" ) // Response 是顶层响应结构 type Response struct { Code string `json:"code"` Data []SDData `json:"data"` } // SDData 是数据项结构 type SDData struct { Key string `json:"SD_Key"` Addr string `json:"SD_Addr"` Code string `json:"SD_Code"` Name string `json:"SD_Name"` Unit string `json:"SD_Unit"` // null值可以用空字符串处理 Data string `json:"SD_Data"` Time string `json:"SD_Time"` } // FetchAndParseData 从URL获取数据并解析 func FetchAndParseData(url string) (*Response, error) { // 创建HTTP客户端,设置超时 client := &http.Client{ Timeout: 10 * time.Second, } // 发送GET请求 resp, err := client.Get(url) if err != nil { log.Errorf("HTTP请求失败: %v", err) return nil, err } defer resp.Body.Close() // 检查状态码 if resp.StatusCode != http.StatusOK { log.Errorf("HTTP状态码错误: %d", resp.StatusCode) return nil, err } // 读取响应体 body, err := io.ReadAll(resp.Body) if err != nil { log.Errorf("读取响应失败: %v", err) return nil, err } // 解析JSON var data Response err = json.Unmarshal(body, &data) if err != nil { log.Errorf("JSON解析失败: %v", err) return nil, err } return &data, nil }