二、HTTP Server
前言
這個示例將展示如何在Go中創建基本的HTTP服務器。一個基本的HTTP服務器需要處理幾個關鍵的任務:
- 處理動態請求:處理來自瀏覽網站、登錄帳戶或發佈圖片的用戶的請求。
- 提供靜態資源:爲瀏覽器提供JavaScript、CSS和圖像,爲用戶創建動態體驗。
- 接受連接: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知識