Go語(yǔ)言JSON數(shù)據(jù)返回的實(shí)戰(zhàn)案例
在現(xiàn)代 Web 應(yīng)用中,JSON 已成為前后端通信的主流數(shù)據(jù)格式。Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)內(nèi)置對(duì) JSON 的良好支持,只需少量代碼就能返回結(jié)構(gòu)化的 JSON 響應(yīng)。
本篇案例將手把手帶你完成一個(gè)「返回 JSON 數(shù)據(jù)的 HTTP 接口」,幫助你理解如何用 Go 語(yǔ)言實(shí)現(xiàn)后端服務(wù)最基礎(chǔ)的功能。
一、目標(biāo)說(shuō)明
構(gòu)建一個(gè) HTTP 服務(wù):
請(qǐng)求地址:/hello
請(qǐng)求方式:GET
返回內(nèi)容:
{ "message": "Hello, Go!", "status": 200 }
二、核心知識(shí)點(diǎn)
net/http
:Go 標(biāo)準(zhǔn) HTTP 庫(kù)encoding/json
:JSON 編解碼包http.ResponseWriter
:響應(yīng)寫入器http.HandleFunc
:注冊(cè)處理函數(shù)
三、完整代碼示例
package main import ( "encoding/json" "net/http" ) type Response struct { Message string `json:"message"` Status int `json:"status"` } func helloHandler(w http.ResponseWriter, r *http.Request) { // 設(shè)置返回頭信息 w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) // 創(chuàng)建響應(yīng)結(jié)構(gòu)體 resp := Response{ Message: "Hello, Go!", Status: 200, } // 編碼為 JSON 并寫入響應(yīng) json.NewEncoder(w).Encode(resp) } func main() { http.HandleFunc("/hello", helloHandler) http.ListenAndServe(":8080", nil) }
四、運(yùn)行與測(cè)試
1. 運(yùn)行服務(wù)
go run main.go
訪問(wèn)瀏覽器或使用 curl
:
curl http://localhost:8080/hello
2. 響應(yīng)結(jié)果
{ "message": "Hello, Go!", "status": 200 }
五、快速問(wèn)答(FAQ)
? 為什么要設(shè)置Content-Type: application/json?
告訴瀏覽器或客戶端,我們返回的是 JSON 格式數(shù)據(jù)。
?json.NewEncoder(w).Encode(...)做了什么?
它將結(jié)構(gòu)體編碼為 JSON 并直接寫入到 ResponseWriter
輸出流。
? 如果編碼失敗會(huì)發(fā)生什么?
Encode()
會(huì)返回 error,可以用 if err != nil
判斷并手動(dòng)寫入 500 錯(cuò)誤。
六、總結(jié)
本案例實(shí)現(xiàn)了一個(gè) Go 最小可用的 JSON 接口:
? 使用標(biāo)準(zhǔn)庫(kù),無(wú)需第三方框架
? 面向新手,極易上手
? 為構(gòu)建 RESTful API 打下基礎(chǔ)
到此這篇關(guān)于Go語(yǔ)言JSON數(shù)據(jù)返回的實(shí)戰(zhàn)案例的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 JSON數(shù)據(jù)返回內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang 如何判斷數(shù)組某個(gè)元素是否存在 (isset)
這篇文章主要介紹了Golang 如何判斷數(shù)組某個(gè)元素是否存在 (isset),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04GO實(shí)現(xiàn)基于命令行的簡(jiǎn)單IPS程序代碼
本文介紹了入侵防御系統(tǒng)IPS的工作原理和實(shí)現(xiàn),IPS通過(guò)網(wǎng)絡(luò)流量監(jiān)控和實(shí)時(shí)響應(yīng),防止網(wǎng)絡(luò)攻擊,通過(guò)使用Go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的IPS示例程序,展示了如何獲取本地IP地址和探測(cè)網(wǎng)絡(luò)中其他設(shè)備的IP地址,包括如何定義和加載規(guī)則文件,以及如何檢測(cè)IP對(duì)相應(yīng)端口的訪問(wèn)是否達(dá)到規(guī)定閾值2024-12-12Golang10進(jìn)制轉(zhuǎn)16進(jìn)制的幾種方法代碼示例
這篇文章主要給大家介紹了關(guān)于Golang10進(jìn)制轉(zhuǎn)16進(jìn)制的幾種方法,進(jìn)制轉(zhuǎn)換是Golang的一些基本操作,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07go貨幣計(jì)算時(shí)如何避免浮點(diǎn)數(shù)精度問(wèn)題
在開(kāi)發(fā)的初始階段,我們經(jīng)常會(huì)遇到“浮點(diǎn)數(shù)精度”和“貨幣值表示”的問(wèn)題,那么在golang中如何避免這一方面的問(wèn)題呢,下面就跟隨小編一起來(lái)學(xué)習(xí)一下吧2024-02-02golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例
這篇文章主要介紹了golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12一文帶你掌握Golang中panic與recover的使用方法
這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考一下2023-04-04Go語(yǔ)言對(duì)接微信支付與退款指南(示例詳解)
在互聯(lián)網(wǎng)技術(shù)日益發(fā)展的背景下,Go語(yǔ)言憑借并發(fā)處理能力,在后端開(kāi)發(fā)中大放異彩,本文詳細(xì)介紹如何使用Go語(yǔ)言對(duì)接微信支付,完成支付和退款功能,包括準(zhǔn)備工作、初始化微信支付客戶端、實(shí)現(xiàn)支付功能,以及處理支付回調(diào)和退款等2024-10-10