前言
這個(gè)示例將展示如何在Go中創(chuàng)建基本的HTTP服務(wù)器茫经。一個(gè)基本的HTTP服務(wù)器需要處理幾個(gè)關(guān)鍵的任務(wù):
- 處理動(dòng)態(tài)請(qǐng)求:處理來自瀏覽網(wǎng)站个扰、登錄帳戶或發(fā)布圖片的用戶的請(qǐng)求瓷炮。
- 提供靜態(tài)資源:為瀏覽器提供JavaScript、CSS和圖像递宅,為用戶創(chuàng)建動(dòng)態(tài)體驗(yàn)娘香。
- 接受連接:HTTP服務(wù)器必須監(jiān)聽一個(gè)特定的端口冬筒,以便能夠接受來自internet的連接。
處理動(dòng)態(tài)請(qǐng)求
net/http包包含接受請(qǐng)求和動(dòng)態(tài)處理請(qǐng)求所需的所有工具茅主∥杼担可以用http.HandleFunc函數(shù)注冊(cè)一個(gè)新的處理程序。第一個(gè)參數(shù)接受要匹配的路徑诀姚,第二個(gè)參數(shù)為要執(zhí)行的函數(shù)响牛。在下面這個(gè)例子中:當(dāng)某人瀏覽網(wǎng)站(http://example.com/)時(shí),他或她將收到一個(gè)歡迎的消息赫段。
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome to my website!")
})
http.Request包含關(guān)于請(qǐng)求及其參數(shù)的所有信息呀打。可以t通過r.URL.Query(). GET(“token”)讀取GET參數(shù)糯笙,或者通過r.FormValue(“email”)讀取POST參數(shù)贬丛。
提供靜態(tài)資源
為了提供JavaScript、CSS和圖像等靜態(tài)資源给涕,可以使用內(nèi)建函數(shù)http.FileServer豺憔,其參數(shù)指向一個(gè)url路徑。文件服務(wù)器需要知道從哪里提供文件够庙,方法如下:
fs := http.FileServer(http.Dir("static/"))
文件服務(wù)器就緒后恭应,只需將url路徑指向它,就像處理動(dòng)態(tài)請(qǐng)求時(shí)所做的那樣耘眨。需要注意的一點(diǎn)是:為了正確地提供文件昼榛,需要?jiǎng)h除url路徑中文件所在目錄的名稱。
http.Handle("/static/", http.StripPrefix("/static/", fs))
接受連接
完成基本的HTTP服務(wù)器的最后一步是剔难,監(jiān)聽端口以接受來自internet的連接胆屿。Golang有一個(gè)內(nèi)置的HTTP服務(wù)器,可以快速啟動(dòng)偶宫。啟動(dòng)后非迹,可以在瀏覽器中查看HTTP服務(wù)器。
代碼
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)
}