HTTP協(xié)議全稱超文本傳輸協(xié)議(HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,它詳細(xì)規(guī)定了瀏覽器和WWW服務(wù)器之間通信的規(guī)則,通過(guò)Internet傳送WWW文檔的數(shù)據(jù)傳送協(xié)議。

我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鄒城ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鄒城網(wǎng)站制作公司
Web服務(wù)是HTTP協(xié)議的一個(gè)服務(wù),HTTP協(xié)議承載在TCP協(xié)議之上。Web服務(wù)工作流程
基于HTTP構(gòu)建的服務(wù)標(biāo)準(zhǔn)模型包括客戶端和服務(wù)端,HTTP請(qǐng)求從客戶端發(fā)出,服務(wù)端接收到請(qǐng)求后進(jìn)行處理,然后將響應(yīng)返回給客戶端。
HTTP服務(wù)端核心工作是如何接收來(lái)自客戶端的請(qǐng)求,并向客戶端返回響應(yīng)。當(dāng)HTTP服務(wù)器接收到客戶端請(qǐng)求時(shí),首先會(huì)進(jìn)入路由模塊,路由又稱為服務(wù)復(fù)用器(Multiplexer),路由的工作在于請(qǐng)求找到對(duì)應(yīng)的處理器(Handler),處理器對(duì)接收到的請(qǐng)求進(jìn)行對(duì)應(yīng)處理后,構(gòu)建響應(yīng)并返回給客戶端。
Go語(yǔ)言通過(guò)引入 net/http 包來(lái)實(shí)現(xiàn)HTTP網(wǎng)絡(luò)訪問(wèn),并提供HTTP客戶端和服務(wù)端的實(shí)現(xiàn)。
創(chuàng)建HTTP服務(wù)需經(jīng)過(guò)2個(gè)階段
例如:創(chuàng)建HTTP服務(wù)
理解HTTP服務(wù)關(guān)鍵點(diǎn)在于路由器和處理器
服務(wù)復(fù)用器
處理器
http.ServeMux 內(nèi)部使用一個(gè) map 映射來(lái)保存所有處理器, http.muxEntry 是一個(gè)多路復(fù)用器入口實(shí)體。
可以發(fā)現(xiàn)在 http.muxEntry 字段中存在著 http.Handler 接口類型的 h
雖然 http.ServeMux 也實(shí)現(xiàn)了 http.ServerHTTP() 算得上是一個(gè) http.Handler ,但 http.ServeMux 的 http.ServeHTTP() 并非用來(lái)處理請(qǐng)求和響應(yīng),而是用來(lái)查找注冊(cè)路由對(duì)應(yīng)的處理器。
當(dāng) http.ServeMux 路由器設(shè)置路由規(guī)則后,會(huì)通過(guò)它實(shí)現(xiàn)的 ServeHTTP() 完成請(qǐng)求的分發(fā)。當(dāng)路由器接收到請(qǐng)求后若請(qǐng)求的URI為 * 則會(huì)關(guān)閉連接,否則會(huì)調(diào)用自身的 Handler() 來(lái)獲取對(duì)應(yīng)路由的處理器,最終通過(guò)調(diào)用 h.ServeHTTP(w,r) 實(shí)現(xiàn)對(duì)應(yīng)路由的實(shí)現(xiàn)邏輯。
路由器會(huì)根據(jù)用戶請(qǐng)求的URL路徑去匹配自身存儲(chǔ)的在 map 中的 handler ,最終調(diào)用匹配到的 handler 的 ServeHTTP() 以實(shí)現(xiàn)執(zhí)行對(duì)應(yīng)路由的處理函數(shù)。
創(chuàng)建 http.ServeMux 實(shí)例的方式有兩種
http.DefaultServeMux 是默認(rèn)的 http.ServeMux ,會(huì)隨著 net/http 包初始化而被自動(dòng)初始化。
當(dāng) http.ListenAndServe() 在沒(méi)有提供其他處理器的情況下,即它的入?yún)?handler 為 nil 時(shí)內(nèi)部會(huì)使用 http.DefaultServeMux 。
net/http 包提供了一組快捷的注冊(cè)路由的函數(shù) http.Handle() 、 http.HandleFunc() 來(lái)配置 http.DefaultServeMux ,快捷函數(shù)會(huì)將處理器注冊(cè)到 http.DefaultServeMux 。
二者之間的區(qū)別在于 handler 參數(shù)上
http.Handle() 的 handler 是一個(gè) http.Handler 接口實(shí)例,也就是說(shuō)傳入的 handler 必須要自己提前實(shí)現(xiàn) http.Handler 接口的 ServerHTTP(ResponseWriter, *Request) 方法。
例如:將處理器放入閉包中,將參數(shù)傳入處理器。
http.HandleFunc() 的 handler 直接是一個(gè)原型為 func(ResponseWriter, *Request) 的函數(shù),深入追蹤會(huì) HandleFunc() 會(huì)發(fā)現(xiàn)一個(gè)自定義的函數(shù)類型。
因此任何具有 func(ResponseWriter, *Request) 簽名的函數(shù)都能轉(zhuǎn)換成為一個(gè) http.HandlerFunc 類型的對(duì)象。同時(shí)自定義的函數(shù)類型中已經(jīng)實(shí)現(xiàn)了 ServeHTTP() 方法,因此它也是一個(gè) http.Handler 。
例如:返回時(shí)使用一個(gè)到 http.HandlerFunc 類型的隱式轉(zhuǎn)換
net/http 包提供了 http.NewServeMux() 來(lái)創(chuàng)建一個(gè)自定義的 http.ServeMux 實(shí)例
例如:調(diào)用 http.NewServeMux() 會(huì)創(chuàng)建服務(wù)復(fù)用器
例如:創(chuàng)建靜態(tài)服務(wù)
Go中沒(méi)有繼承、多態(tài),可通過(guò)接口來(lái)實(shí)現(xiàn)。而接口則是定義聲明的函數(shù)簽名,任何結(jié)構(gòu)體只要實(shí)現(xiàn)與接口函數(shù)簽名相同的方法,即等同于實(shí)現(xiàn)了對(duì)應(yīng)的接口。
例如: http.HandleFunc() 處理函數(shù)實(shí)現(xiàn)實(shí)際上調(diào)用默認(rèn) http.DefaultServeMux 的 HandleFunc() 方法
例如:調(diào)用 http.Handle() 方法則第二個(gè)參數(shù) handle 必須實(shí)現(xiàn) http.Handler 接口的 ServeHTTP() 方法,也就是說(shuō)只要具有 ServeHTTP() 簽名方法即可作為處理器。
例如:自定義處理器
http.HandlerFunc 自身已實(shí)現(xiàn) http.Handler 接口的 ServeHTTP() 方法,因此它也是一個(gè)處理器。
http.HandlerFunc 的作用是將自定義函數(shù)轉(zhuǎn)換為 http.Handler 處理器類型,當(dāng)調(diào)用 http.HandlerFunc(fn) 后會(huì)強(qiáng)制將 fn 函數(shù)類型轉(zhuǎn)換為 http.HandlerFunc 類型,這樣 fn 函數(shù)就具有了 ServeHTTP() 方法,同時(shí)也就轉(zhuǎn)換成為了一個(gè) http.Handler 處理器。因此 http.HandlerFunc 又稱為適配器。
Go語(yǔ)言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語(yǔ)言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語(yǔ)言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語(yǔ)言”。
Go語(yǔ)言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語(yǔ)言。
Go語(yǔ)言能干什么?
1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來(lái)做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語(yǔ)言開發(fā);
3、網(wǎng)絡(luò)編程:大量?jī)?yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語(yǔ)言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語(yǔ)言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語(yǔ)言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
1、看go自帶的文檔
godoc -http=localhost:999
2、看go for web和go并發(fā)編程者兩本書
附上學(xué)習(xí)資料
新聞名稱:go語(yǔ)言http包的簡(jiǎn)單介紹
當(dāng)前地址:http://chinadenli.net/article4/hipsie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、全網(wǎng)營(yíng)銷推廣、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)