我的 API 回應正文似乎被截斷了?
我是第一次涉足GO,我用來取得股票價格的API 接受多個股票代號(想想股票ID; NVDA => Nvidia),以減少我有限的API 呼叫。 然而,當嘗試獲取多個程式碼時,正文似乎被切斷:
{ "meta ": { "requested ": 2, "returned ": 2 }, "data ": [ { "ticker ": "MSFT ", "name ": "Microsoft Corporation ", "exchange_short ": null, "exchange_long ": null, "mic_code ": "IEXG ", "currency ": "USD ", "price ": 374.72, "day_high ": 376.92, "day_low ": 373.54, "day_open ": 374.94, "52_week_high ": 349.84, "52_week_low ": 213.43, "market_cap ": null, "previous_close_price ": 374.58, "previous_close_price_time ": "2023-12-22T15:59:56.000000 ", "day_change ": 0.04, "volume ": 165558, "is_extended_hours_price ": false, "last_trade_time ": "2023-12-26T16:00:00.000000 " }, { "ticker ": ""
在郵差直接對 Stock API 進行精確呼叫會回傳:
{ "meta": { "requested": 2, "returned": 2 }, "data": [ { "ticker": "MSFT", "name": "Microsoft Corporation", "exchange_short": null, "exchange_long": null, "mic_code": "IEXG", "currency": "USD", "price": 374.72, "day_high": 376.92, "day_low": 373.54, "day_open": 374.94, "52_week_high": 349.84, "52_week_low": 213.43, "market_cap": null, "previous_close_price": 374.58, "previous_close_price_time": "2023-12-22T15:59:56.000000", "day_change": 0.04, "volume": 165558, "is_extended_hours_price": false, "last_trade_time": "2023-12-26T16:00:00.000000" }, { "ticker": "PLTR", "name": "Palantir Technologies Inc", "exchange_short": null, "exchange_long": null, "mic_code": "IEXG", "currency": "USD", "price": 17.68, "day_high": 17.75, "day_low": 17.34, "day_open": 17.45, "52_week_high": 17.16, "52_week_low": 5.92, "market_cap": null, "previous_close_price": 17.42, "previous_close_price_time": "2023-12-22T15:59:56.000000", "day_change": 1.47, "volume": 236201, "is_extended_hours_price": false, "last_trade_time": "2023-12-26T15:59:58.000000" } ] }
我認為我做錯了什麼(昨天之前我從未接觸過 GO) 相關程式碼如下:
func getStockPriceData(ticker string) []Stock { baseURL, _ := url.Parse("https://api.stockdata.org") baseURL.Path += "v1/data/quote" params := url.Values{} params.Add("symbols", ticker) params.Add("api_token", apiToken.ApiToken) baseURL.RawQuery = params.Encode() req, _ := http.NewRequest("GET", baseURL.String(), nil) res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { panic(err.Error()) } apiResponseData := ApiResponseStockData{} //json.NewDecoder(res.Body).Decode(&apiResponseData) err2 := json.Unmarshal(body, &apiResponseData) if err2 != nil { fmt.Println("whoops:", err2) } stocks := []Stock{} for _, data := range apiResponseData.ResponseStockData { stock := Stock{} stock.Name = data.Name stock.Ticker = data.Ticker stock.Price = data.Price stock.DayHigh = data.DayHigh stock.DayLow = data.DayLow stock.DayOpen = data.DayOpen stock.PreviousClosePrice = data.PreviousClosePrice stock.DayChange = data.DayChange stocks = append(stocks, stock) } return stocks }
上下文結構:
type Stock struct { Name string `json:"name"` Ticker string `json:"ticker"` Price float64 `json:"price"` DayHigh float64 `json:"day_high"` DayLow float64 `json:"day_low"` DayOpen float64 `json:"day_open"` DayChange float64 `json:"day_change"` PreviousClosePrice float64 `json:"previous_close_price"` } type ApiResponseStockData struct { ResponseStockData []ResponseData `json:"data"` } type ResponseData struct { Name string `json:"name"` Ticker string `json:"ticker"` ExchangeShort bool `json:"exchange_short"` ExchangeLong bool `json:"exchange_long"` MicCode string `json:"mic_code"` Currency string `json:"currency"` Price float64 `json:"price"` DayHigh float64 `json:"day_high"` DayLow float64 `json:"day_low"` DayOpen float64 `json:"day_open"` DayChange float64 `json:"day_change"` YearHigh float64 `json:"52_week_high"` YearLow float64 `json:"52_week_low"` MarketCap float64 `json:"market_cap"` PreviousClosePrice float64 `json:"previous_close_price"` PreviousCloseTime time.Time `json:"previous_close_time"` Volume float64 `json:"volume"` IsExtendedHoursPrice bool `json:"is_extended_hours_price"` LastTradeTime time.Time `json:"last_trade_time"` }
在查看了幾個線程後,我嘗試使用 json.Unmarshal
和 json.NewDecoder().Decode()
但仍然沒有運氣。上面的截止字串來自正文,當使用 Decode
或 Unmarshal
時,它成功地將單一完整物件新增至 apiResponseData
中。我可以理解這是否是一個巨大的回應,但這看起來很簡單,所以我不得不假設我犯了一個非常明顯的菜鳥錯誤。
任何幫助將不勝感激。
正確答案
您正在嘗試使用包含時區偏移量(“Z07:00”)的格式來解析時間字串。
您需要將時間佈局調整為以下。
layout := "2006-01-02T15:04:05.000000"
您的錯誤處理不正確,這就是為什麼您也能夠以錯誤的回應退出。
以上是我的 API 回應正文似乎被截斷了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OpenSSL,作為廣泛應用於安全通信的開源庫,提供了加密算法、密鑰和證書管理等功能。然而,其歷史版本中存在一些已知安全漏洞,其中一些危害極大。本文將重點介紹Debian系統中OpenSSL的常見漏洞及應對措施。 DebianOpenSSL已知漏洞:OpenSSL曾出現過多個嚴重漏洞,例如:心臟出血漏洞(CVE-2014-0160):該漏洞影響OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻擊者可利用此漏洞未經授權讀取服務器上的敏感信息,包括加密密鑰等。

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

本文介紹在Debian系統下監控PostgreSQL數據庫的多種方法和工具,助您全面掌握數據庫性能監控。一、利用PostgreSQL內置監控視圖PostgreSQL自身提供多個視圖用於監控數據庫活動:pg_stat_activity:實時展現數據庫活動,包括連接、查詢和事務等信息。 pg_stat_replication:監控複製狀態,尤其適用於流複製集群。 pg_stat_database:提供數據庫統計信息,例如數據庫大小、事務提交/回滾次數等關鍵指標。二、借助日誌分析工具pgBadg

在BeegoORM框架下,如何指定模型關聯的數據庫?許多Beego項目需要同時操作多個數據庫。當使用Beego...

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...
