上一章節介紹了使用echo啟動一個http服務器并提供一個簡單的GET接口,這一章對請求與響應做一下詳細的講解。
創新互聯2013年至今,先為賈汪等服務建站,賈汪等地企業,進行企業商務咨詢服務。為賈汪企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
了解請求與響應之前首先要知道ehco框架提供了一個Context接口,Context 表示當前 HTTP 請求的上下文,我們需要知道的是Context的實現結構體context,context中包含了請求(request)、響應(response)以及參數等結構體,context是一個內部結構體,但是對外提供了訪問的方法,我們可以在開發中使用context提供的方法做很多事情,比如獲取請求路徑、客戶端ip、請求參數等等。
request是包含了當前請求信息的結構體,我們從中可以獲取到前后端約定好的參數來作出相應的業務邏輯,這下面開始模擬請求
首先模擬一個添加用戶的POST請求,這里使用了c.bind()這個方法,這個方法起到的作用是把表單參數或者JSON參數綁定至對應的結構體(這里必須是指針類型),字段需要一一對應,也就是說前端需要傳遞的表單或JSON參數名為name、age、gender才能綁定到結構體中。
接下來模擬一個GET請求用來獲取用戶信息
response是包含了返回信息的結構體,echo提供了多種類型的返回結果
上面編寫了處理請求的handler,這里介紹一下如何把handler注冊到路由中,這里對應的就是上面handler。
當客戶端在 發出POST請求時/albums,您希望將請求正文中描述的專輯添加到現有專輯數據中。
為此,您將編寫以下內容:
1、編寫代碼
a.添加代碼以將專輯數據添加到專輯列表。
在此代碼中:
1)用于Context.BindJSON 將請求正文綁定到newAlbum。
2) album將從 JSON 初始化的結構附加到albums 切片。
3)向響應添加201狀態代碼,以及表示您添加的專輯的 JSON。
b.更改您的main函數,使其包含該router.POST函數,如下所示。
在此代碼中:
1)將路徑中的POST方法與 /albumspostAlbums函數相關聯。
使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關聯。這樣,您可以根據客戶端使用的方法將發送到單個路徑的請求單獨路由。
a.如果服務器從上一節開始仍在運行,請停止它。
b.從包含 main.go 的目錄中的命令行,運行代碼。
c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。
該命令應顯示添加專輯的標題和 JSON。
d.與上一節一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。
該命令應顯示專輯列表。
當客戶端向 發出請求時GET /albums/[id],您希望返回 ID 與id路徑參數匹配的專輯。
為此,您將:
a.在您在上一節中添加的函數下方postAlbums,粘貼以下代碼以檢索特定專輯。
此getAlbumByID函數將提取請求路徑中的 ID,然后找到匹配的專輯。
在此代碼中:
(1)Context.Param用于從 URL 中檢索id路徑參數。當您將此處理程序映射到路徑時,您將在路徑中包含參數的占位符。
(2)循環album切片中的結構,尋找其ID 字段值與id參數值匹配的結構。如果找到,則將該album結構序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應返回。
如上所述,實際使用中的服務可能會使用數據庫查詢來執行此查找。
(3)如果找不到專輯,則返回 HTTP 404錯誤。
b.最后,更改您的main,使其包含對router.GET的新調用,路徑現在為/albums/:id ,如以下示例所示。
在此代碼中:
(1)將/albums/:id路徑與getAlbumByID功能相關聯。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數。
a.如果服務器從上一節開始仍在運行,請停止它。
b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務器。
c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。
該命令應顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。
恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務。
本節包含您使用本教程構建的應用程序的代碼。
解決的辦法,在 /etc/sysctl.conf加入下面幾句話
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000 ## 端口分配范圍
net.ipv4.tcp_max_tw_buckets = 5000 ## 設置"time_wait"的桶最多容納5000個
添加完畢以后
sysctl -p 讓以上配置生效
goget請求可以接受結構體。
接收者是結構體時,可以是結構體類型、結構體指針類型。調用時不區分調用者是結構體還是結構體指針,go語言會自動轉化為對應的結構體或結構體指針。
網頁名稱:go語言post請求 go語言sprintf
標題路徑:http://vcdvsql.cn/article12/doisggc.html
成都網站建設公司_創新互聯,為您提供定制開發、手機網站建設、ChatGPT、微信公眾號、做網站、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯