」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Go 中的 Web 服務 Api 伺服器

Go 中的 Web 服務 Api 伺服器

發佈於2024-07-31
瀏覽:420

Web Service Api Server in Go

在本章中,我們將介紹 go 和 Json Web 編程,以 API 形式建立具有回應資料類型的 API Web 服務。

  1. WEB創建API 首先準備一些樣本數據
package main
import "encoding/json"
import "net/http"
import "fmt"
type student struct {
 ID string
 Name string
 Grade int
}
var data = []student{
 student{"E001", "ethan", 21},
 student{"W001", "wick", 22},
 student{"B001", "bourne", 23},
 student{"B002", "bond", 23},
}

上面的student結構體作為樣本資料切片元素類型,儲存在data變數中。
接下來,建立一個 user() 函數來處理 /users 端點。在此函數中,透過 r.Method() 屬性進行請求類型偵測過程,以找出請求類型是 Post 還是 Get 還是其他類型。

func users(w http.ResponseWriter, r *http.Request) {
 w.Header().Set("Content-Type", "application/json")
 if r.Method == "GET" {
 var result, err = json.Marshal(data)
 if err != nil {
 http.Error(w, err.Error(), http.StatusInternalServerError)
 return
 }
 w.Write(result)
 return
 }
 http.Error(w, "", http.StatusBadRequest)
}

如果請求是GET(檢索資料),則資料以JSON編碼
用作響應。
w.Header().Set("Content-Type", "application/json") 語句用於
確定回應類型,即 JSON。而 r.Write()
用於註冊資料作為回應。
否則,如果請求無效,則使用
將回應設為錯誤 http.Error() 函數。
也為 /user 端點設定一個處理程序。該端點與
的區別 上面的 /user 是:
/users 端點傳回所有現有範例資料(陣列)。
/user 端點僅傳回一筆數據,取自 data
基於其 ID 的樣本。在此端點,客戶端必鬚髮送
還有正在尋找的資料的ID資訊

func user(w http.ResponseWriter, r *http.Request) {
 w.Header().Set("Content-Type", "application/json")
 if r.Method == "GET" {
 var id = r.FormValue("id")
 var result []byte
 var err error
 for _, each := range data {
 if each.ID == id {
 result, err = json.Marshal(each)
 if err != nil {
 http.Error(w, err.Error(), http.StatusInternalServerError)
 return
 }
 w.Write(result)
 return
 }
 }
 http.Error(w, "User not found", http.StatusNotFound)
 return
 }
 http.Error(w, "", http.StatusBadRequest)
}

r.FormValue()方法用於檢索從
發送的表單數據 客戶端,在此上下文中引用的資料是 ID。
透過使用該ID,可以搜尋相關數據。如果有的話
作為響應返回。如果不存在,則錯誤 400,錯​​誤請求
返回訊息“​​未找到用戶”。
最後,實作上面的兩個處理程序。

func main() {
 http.HandleFunc("/users", users)
 http.HandleFunc("/user", user)
 fmt.Println("starting web server at http://localhost:8080/")
 http.ListenAndServe(":8080", nil)
}

運行程序,現在Web伺服器已上線並且可以使用資料。

版本聲明 本文轉載於:https://dev.to/sukmarizki04/web-service-api-server-in-go-efl?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼自動換行在 HTML 表格中不起作用,如何修復?
    為什麼自動換行在 HTML 表格中不起作用,如何修復?
    HTML 表格中的自動換行:修復未換行的文字自動換行是CSS 屬性,用於使文字在元素內換行就像div 和span 一樣。但是,它通常無法在表格單元格中工作,導致文字溢出單元格的邊界。 要解決此問題,您可以使用表格的 table-layout:fixed CSS 屬性。此屬性強製表格具有固定佈局,使其...
    程式設計 發佈於2024-12-23
  • 什麼時候應該在 C++ 中使用 `std::size_t` 作為循環計數器?
    什麼時候應該在 C++ 中使用 `std::size_t` 作為循環計數器?
    何時在C 碼中使用std::size_t問題:何時使用C 中的循環,特別是在比較數組大小的情況下,最好使用std::size_t而不是像這樣的原始資料類型int?範例:#include <cstdint> int main() { for (std::size_t i = 0; ...
    程式設計 發佈於2024-12-23
  • 我應該對網站上的圖像使用 Base64 編碼嗎?
    我應該對網站上的圖像使用 Base64 編碼嗎?
    了解以 Base64 編碼圖像的影響將圖像轉換為 Base64 編碼是 Web 開發中的常見做法。然而,重要的是要了解它對檔案大小和網站效能的影響。 Base64 編碼影像的大小增加當影像轉換為 Base64 時,其大小通常會增加約 37%。這是因為Base64編碼使用6位元字元集來表示8位元數據,...
    程式設計 發佈於2024-12-23
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-23
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-23
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-23
  • 考慮到版本特定的行為,如何正確地將 Java 陣列轉換為列表?
    考慮到版本特定的行為,如何正確地將 Java 陣列轉換為列表?
    在Java 中將陣列轉換為清單:陣列與清單轉換之旅在資料操作領域,陣列與清單之間的轉換清單是Java 等程式語言中的基礎操作。然而,這種轉換的複雜性可能會帶來挑戰,特別是由於 Java 版本之間行為的微妙變化。 Arrays.asList() 行為的演變The Arrays.asList() 方法從...
    程式設計 發佈於2024-12-23
  • 為什麼 Python 會拋出 UnboundLocalError?
    為什麼 Python 會拋出 UnboundLocalError?
    UnboundLocalError 是如何發生的:Python 中的未綁定名稱和變數綁定在Python 中,變數綁定決定了變數的作用域和生命週期。當名稱未分配值時,它被視為未綁定。這可能會導致 UnboundLocalError 異常。 了解未綁定局部變數與具有明確宣告的語言不同,Python 允許...
    程式設計 發佈於2024-12-23
  • 透過「jQuery 快速入門」課程釋放您的 Web 開發技能
    透過「jQuery 快速入門」課程釋放您的 Web 開發技能
    您準備好提升您的 Web 開發專業知識並釋放最受歡迎的 JavaScript 庫 jQuery 的強大功能了嗎? LabEx 提供的「jQuery 快速入門」課程就是您的最佳選擇。這個綜合性的程式將引導您了解 jQuery 的基礎知識,使您能夠操作文件物件模型 (DOM) 並為您的網頁注入迷人的互動...
    程式設計 發佈於2024-12-23
  • 如何在 MySQL WHERE IN() 子句中處理具有多個值的記錄?
    如何在 MySQL WHERE IN() 子句中處理具有多個值的記錄?
    MySQL IN () 運算子查詢MySQL 資料庫時,WHERE IN () 運算子常用於根據特定條件擷取行列中的值。例如,以下查詢從「table」表中擷取「id」列與任意值(1、2、3、4) 相符的所有行:SELECT * FROM table WHERE id IN (1,2,3,4);但是,...
    程式設計 發佈於2024-12-23
  • 如何根據與特定值相符的列值過濾數組行?
    如何根據與特定值相符的列值過濾數組行?
    基於列值包含的行子集考慮一個具有多個列的數組$arr1 和第二個平面數組$arr2 ,包含特定的id 值。目標是過濾 $arr1 以僅保留列值與 $arr2 中的任何值相符的行。 先前使用篩選函數或 array_search 的嘗試已證明不成功。一個實用的解決方案涉及使用本機 PHP 函數 arra...
    程式設計 發佈於2024-12-23
  • 如何使用 DockerMake 將多個 Docker 映像合併為一個映像?
    如何使用 DockerMake 將多個 Docker 映像合併為一個映像?
    組合多個 Docker 映像Docker 不直接支援將多個 Docker 映像組合成一個統一的映像。但是,可以使用第三方工具來促進此過程。 DockerMake 就是這樣一個工具,可以創造複雜的映像繼承場景。 使用 DockerMake 組合映像DockerMake 透過使用 YAML 檔案定義之間...
    程式設計 發佈於2024-12-23
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-23
  • OpenCV 的 `cvWaitKey()` 函數如何管理使用者互動和視窗事件?
    OpenCV 的 `cvWaitKey()` 函數如何管理使用者互動和視窗事件?
    探討OpenCV 的「cvWaitKey()」功能OpenCV 的「cvWaitKey()」函數在管理使用者互動方面發揮至關重要的作用OpenCV 窗口。讓我們深入研究其內部運作方式和典型用例:功能概述cvWaitKey(x) 提供兩個主要功能:按鍵偵測:它等待使用者在OpenCV 視窗上按指定的持...
    程式設計 發佈於2024-12-23
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-23

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3