Web 應用在咱們的生活中無處不在。看看咱們平常使用的各個應用程序,它們要
麼是 Web 應用,要麼是移動 App 這類 Web 應用的變種。不管哪種編程語言,只要
它可以開發出與人類交互的軟件,它就必然會支持 Web 應用開發。對一門嶄新的編程
語言來講,它的開發者首先要作的一件事,就是構建與互聯網( Internet)和萬維網( World
Wide Web)交互的庫( library)和框架,而那些更爲成熟的編程語言還會有各類五花八門
的 Web 開發工具。
Go 是一門剛開始嶄露頭角的語言,它是爲了讓人們可以簡單而高效地編寫後端系
統而建立的。這門語言擁有衆多的先進特性,如函數式編程方面的特性、內置了對併發
編程的支持、現代化的包管理系統、垃圾收集特性、以及一些一應俱全威力強大的標準
庫,並且若是須要咱們還能夠引入第三方開源庫。web
使用 Go 語言進行 Web 開發正變得日益流行,不少大公司都在使用,如 Google、
Facebook、騰訊、百度、阿里巴巴、京東、小米以及 360、美團、滴滴以及新浪等編程
package main import ( "fmt" "net/http" ) //建立處理器函數 func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello World!", r.URL.Path) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
Go 提供了一系列用於建立 Web 服務器的標準庫,並且經過 Go 建立一個服務器的
步驟很是簡單,只要經過 net/http 包調用 ListenAndServe 函數並傳入網絡地址以及負
責處理請求的處理器( handler )做爲參數就能夠了。若是網絡地址參數爲空字符串,那
麼服務器默認使用 80 端口進行網絡鏈接;若是處理器參數爲 nil,那麼服務器將使用默
認的多路複用器 DefaultServeMux,固然,咱們也能夠經過調用 NewServeMux 函數創
建一個多路複用器。多路複用器接收到用戶的請求以後根據請求的 URL 來判斷使用哪
個處理器來處理請求,找到後就會重定向到對應的處理器來處理請求.後端
第一種服務器
package main import ( "fmt" "net/http" ) //建立處理器函數 func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "正在經過處理器函數處理你的請求") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
第二種網絡
package main import ( "fmt" "net/http" ) type MyHandler struct{} func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "正在經過處理器處理你的請求") } func main() { myHandler := MyHandler{} //調用處理器 http.Handle("/", &myHandler) http.ListenAndServe(":8080", nil) }
第三種併發
package main import ( "fmt" "net/http" "time" ) type MyHandler struct{} func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "測試經過 Server 結構詳細配置服務 器") } func main() { myHandler := MyHandler{} //經過 Server 結構對服務器進行更詳細的配置 server := http.Server{ Addr: ":8080", Handler: &myHandler, ReadTimeout: 2 * time.Second, } server.ListenAndServe() }
在建立服務器時,咱們還能夠經過 NewServeMux 方法建立一個多路複用器框架
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "經過本身建立的多路複用器來處理請求") } func main() { mux := http.NewServeMux() mux.HandleFunc("/myMux", handler) http.ListenAndServe(":8080", mux) }