如何在 Go 中構建一個基本的 Web 服務器
Go 是一種大有前途的編程語言,用于構建現代 Web 應用程序和系統軟件。它一發布就席卷了科技行業,并為 Docker、Kubernetes、Terraform、Dropbox 和 Netflix 等服務提供支持。
此外,Go 強大的內置包集合使其成為 Web 編程的絕佳選擇。本文將教你如何用 Go 編寫一個基本的 Web 服務器。
導入必要的包
net/HTTP 包提供了創建 Web 服務器和客戶端所需的一切。這個包公開了幾個處理 Web 編程的有用函數。
您可以通過在源代碼頂部添加以下行來導入它:
import "net/http"
我們還將使用fmt包來格式化字符串,使用log包來處理錯誤。您可以如上所示單獨導入它們,也可以使用單個導入語句分解所有包:
import (
"fmt"
"log"
"net/http"
)
導入所需的包后,您可以繼續編寫 main 函數。繼續并使用.go擴展名保存源文件。如果您使用的是 Vim,請使用以下命令保存并退出 Vim:
:wq linuxmi.server.go
編寫主函數
Go 程序存在于 main 函數中,恰當地命名為“main”。您需要在此處實現服務器調用。在源代碼中添加以下行并查看它們的作用:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
我們使用func關鍵字定義主函數。Go 對左大括號的放置有嚴格的規定,因此請確保大括號在正確的行上。main 中的第一條語句定義所有到達根 ( “/” ) 路徑的 Web 請求都將由index處理,index 是http.HandlerFunc類型的函數。
第二行通過http.ListenAndServe函數啟動 Web 服務器。它向服務器發出信號,以持續偵聽主機端口 8080 上的傳入 HTTP 請求。需要此函數的第二個參數來阻止程序直到終止。
由于 http.ListenAndServe 總是返回錯誤,我們將這個調用包裝在log.Fatal調用中。此語句記錄在服務器端生成的任何錯誤消息。
實現處理函數
可以看到,主函數調用處理函數索引來處理客戶端請求。但是,我們還沒有為我們的服務器定義這個函數。
讓我們添加必要的語句以使索引函數可用:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "大家好,歡迎來到Linux迷 %s!", r.URL.Path[1:])
}
此函數采用http.ResponseWriter和http.Request類型的兩個不同參數。http.ResponseWriter 參數包含服務器對傳入請求的響應,它以 http.Request 對象的形式出現。
fmt 包中的 Fprintf 函數用于顯示和操作文本字符串。我們使用它來顯示服務器對我們的網絡請求的響應。最后,r.URL.Path[1:]組件用于獲取根路徑之后的數據。
將所有部分加在一起
將所有部分添加在一起后,您的 Go Web 服務器應該已經準備就緒。代碼應類似于以下內容:
package main
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "大家好,歡迎來到Linux迷 %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
第一行用于將此 Go Web 服務器代碼編譯為可執行文件。
使用 Go 構建 Web 服務器
Go 強大的庫包便于初學者進行 Web 編程。只需幾行代碼,您就可以快速開發簡單的 Web 服務器。
此外,這種編程語言強大的測試特性也使得敏捷編程方法的實現變得容易。這些是一組基于迭代開發和團隊之間廣泛協作的軟件開發策略。