從 Go 中的 REST API 端點傳回 json 對象
go語言
php小編百草在這篇文章中將為大家介紹如何從Go語言寫的REST API端點傳回json物件。作為一種常見的資料交換格式,json在web開發中被廣泛使用。透過使用Go語言的net/http套件和encoding/json套件,我們可以輕鬆地將資料轉換為json格式並傳回給客戶端。本文將詳細說明這個過程,並提供範例程式碼來幫助讀者理解和實踐。無論您是初學者還是有經驗的開發者,本文都將對您有所幫助。讓我們開始吧!
問題內容
我正在使用 golang 建立 api。我希望此端點返回 json 數據,以便我可以在我的前端中使用它。
http.handlefunc("/api/orders", createorder)
登入後複製
目前我的函數沒有傳回 json 對象,而且 jsonmap 變數沒有使用 create struc
將回應正文對應到伺服器
我的結構
type createorder struct { id string `json:"id"` status string `json:"status"` links []links `json:"links"` }
登入後複製
我的createorder函數(根據評論更新)
func createorder(w http.responsewriter, r *http.request) { accesstoken := generateaccesstoken() w.header().set("access-control-allow-origin", "*") fmt.println(accesstoken) body := []byte(`{ "intent":"capture", "purchase_units":[ { "amount":{ "currency_code":"usd", "value":"100.00" } } ] }`) req, err := http.newrequest("post", base+"/v2/checkout/orders", bytes.newbuffer(body)) req.header.set("content-type", "application/json") req.header.set("authorization", "bearer "+accesstoken) client := &http.client{} resp, err := client.do(req) if err != nil { log.fatalf("an error occured %v", err) } fmt.println(resp.statuscode) defer resp.body.close() if err != nil { log.fatal(err) } var jsonmap createorder error := json.newdecoder(resp.body).decode(&jsonmap) if error != nil { log.fatal(err) } w.writeheader(resp.statuscode) json.newencoder(w).encode(jsonmap) }
登入後複製
這就是列印的內容。列印不帶物件鍵的值
{2mh36251c2958825n created [{something self get} {soemthing approve get}]}
登入後複製
應該要列印
{ id: '8BW01204PU5017303', status: 'CREATED', links: [ { href: 'url here', rel: 'self', method: 'GET' }, ... ] }
登入後複製
解決方法
func createorder(w http.responsewriter, r *http.request) { // ... resp, err := http.defaultclient.do(req) if err != nil { log.println("an error occured:", err) return } defer resp.body.close() if resp.statuscode != http.statusok /* or http.statuscreated (depends on the api you're using) */ { log.println("request failed with status:", http.status) w.writeheader(resp.statuscode) return } // decode response from external service v := new(createorder) if err := json.newdecoder(resp.body).decode(v); err != nil { log.println(err) return } // send response to frontend w.writeheader(resp.statuscode) if err := json.newencoder(w).encode(v); err != nil { log.println(err) } }
登入後複製
或者,如果您想要將資料從外部服務不變地傳送到前端,您應該可以執行以下操作:
func createOrder(w http.ResponseWriter, r *http.Request) { // ... resp, err := http.DefaultClient.Do(req) if err != nil { log.Println("An Error Occured:", err) return } defer resp.Body.Close() if resp.StatusCode != http.StatusOK /* or http.StatusCreated (depends on the API you're using) */ { log.Println("request failed with status:", http.Status) w.WriteHeader(resp.StatusCode) return } // copy response from external to frontend w.WriteHeader(resp.StatusCode) if _, err := io.Copy(w, resp.Body); err != nil { log.Println(err) } }
登入後複製
以上是從 Go 中的 REST API 端點傳回 json 對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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