package main import ( "encoding/json" "fmt" "io" "net/http" "net/url" ) const ( APIKey = "987b9c3428a3d0fe90179e3e6298d05e" BaseURL = "https://api.stlouisfed.org/fred" ) func buildURL(endpoint string, params map[string]string) string { u, _ := url.Parse(BaseURL + endpoint) query := u.Query() query.Set("api_key", APIKey) query.Set("file_type", "json") for k, v := range params { if v != "" { query.Set(k, v) } } u.RawQuery = query.Encode() return u.String() } func fetchAndPrint(endpoint string, params map[string]string) { url := buildURL(endpoint, params) fmt.Printf("\n=== Testing %s ===\n", endpoint) fmt.Printf("URL: %s\n\n", url) resp, err := http.Get(url) if err != nil { fmt.Printf("Error: %v\n", err) return } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading body: %v\n", err) return } var prettyJSON map[string]interface{} if err := json.Unmarshal(body, &prettyJSON); err == nil { output, _ := json.MarshalIndent(prettyJSON, "", " ") fmt.Printf("Response:\n%s\n", output) } else { fmt.Printf("Response:\n%s\n", string(body)) } } func main() { fmt.Println("========================================") fmt.Println(" FRED API 测试脚本") fmt.Println("========================================") fetchAndPrint("/series", map[string]string{"series_id": "GNPCA"}) fetchAndPrint("/series/observations", map[string]string{ "series_id": "GNPCA", "limit": "5", "observation_end": "2000-01-01", }) fetchAndPrint("/series/search", map[string]string{ "search_text": "GDP", "limit": "3", }) fetchAndPrint("/releases", map[string]string{ "limit": "3", }) fetchAndPrint("/releases/dates", map[string]string{ "limit": "3", "start_date": "2026-03-01", "end_date": "2026-03-31", }) fmt.Println("\n========================================") fmt.Println(" 测试完成!") fmt.Println("========================================") }