前言

這個示例將展示如何在Go中創建基本的HTTP服務器。一個基本的HTTP服務器需要處理幾個關鍵的任務:

  1. 處理動態請求:處理來自瀏覽網站、登錄帳戶或發佈圖片的用戶的請求。
  2. 提供靜態資源:爲瀏覽器提供JavaScript、CSS和圖像,爲用戶創建動態體驗。
  3. 接受連接:HTTP服務器必須監聽一個特定的端口,以便能夠接受來自internet的連接。

處理動態請求

net/http包包含接受請求和動態處理請求所需的所有工具。可以用 http.HandleFunc 函數註冊一個新的處理程序。第一個參數接受要匹配的路徑,第二個參數爲要執行的函數。在下面這個例子中:當某人瀏覽網站( http://example.com/ )時,他或她將收到一個歡迎的消息。

http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Welcome to my website!")
})

http.Request包含關於請求及其參數的所有信息。可以t通過 r.URL.Query(). GET(“token”) 讀取GET參數,或者通過 r.FormValue(“email”) 讀取POST參數。

提供靜態資源

爲了提供JavaScript、CSS和圖像等靜態資源,可以使用內建函數 http.FileServer ,其參數指向一個url路徑。文件服務器需要知道從哪裏提供文件,方法如下:

fs := http.FileServer(http.Dir("static/"))

文件服務器就緒後,只需將url路徑指向它,就像處理動態請求時所做的那樣。需要注意的一點是:爲了正確地提供文件,需要刪除url路徑中文件所在目錄的名稱。

http.Handle("/static/", http.StripPrefix("/static/", fs))

接受連接

完成基本的HTTP服務器的最後一步是,監聽端口以接受來自internet的連接。Golang有一個內置的HTTP服務器,可以快速啓動。啓動後,可以在瀏覽器中查看HTTP服務器。

代碼

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Welcome to my website!")
    })

    fs := http.FileServer(http.Dir("static/"))
    http.Handle("/static/", http.StripPrefix("/static/", fs))

    http.ListenAndServe(":80", nil)
}

歡迎關注我們的微信公衆號,每天學習Go知識

相關文章