真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言http包的簡單介紹

http.ServeMux

HTTP協(xié)議全稱超文本傳輸協(xié)議(HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,它詳細(xì)規(guī)定了瀏覽器和WWW服務(wù)器之間通信的規(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ù),是有科學(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請求從客戶端發(fā)出,服務(wù)端接收到請求后進(jìn)行處理,然后將響應(yīng)返回給客戶端。

HTTP服務(wù)端核心工作是如何接收來自客戶端的請求,并向客戶端返回響應(yīng)。當(dāng)HTTP服務(wù)器接收到客戶端請求時(shí),首先會(huì)進(jìn)入路由模塊,路由又稱為服務(wù)復(fù)用器(Multiplexer),路由的工作在于請求找到對應(yīng)的處理器(Handler),處理器對接收到的請求進(jìn)行對應(yīng)處理后,構(gòu)建響應(yīng)并返回給客戶端。

Go語言通過引入 net/http 包來實(shí)現(xiàn)HTTP網(wǎng)絡(luò)訪問,并提供HTTP客戶端和服務(wù)端的實(shí)現(xiàn)。

創(chuàng)建HTTP服務(wù)需經(jīng)過2個(gè)階段

例如:創(chuàng)建HTTP服務(wù)

理解HTTP服務(wù)關(guān)鍵點(diǎn)在于路由器和處理器

服務(wù)復(fù)用器

處理器

http.ServeMux 內(nèi)部使用一個(gè) map 映射來保存所有處理器, 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() 并非用來處理請求和響應(yīng),而是用來查找注冊路由對應(yīng)的處理器。

當(dāng) http.ServeMux 路由器設(shè)置路由規(guī)則后,會(huì)通過它實(shí)現(xiàn)的 ServeHTTP() 完成請求的分發(fā)。當(dāng)路由器接收到請求后若請求的URI為 * 則會(huì)關(guān)閉連接,否則會(huì)調(diào)用自身的 Handler() 來獲取對應(yīng)路由的處理器,最終通過調(diào)用 h.ServeHTTP(w,r) 實(shí)現(xiàn)對應(yīng)路由的實(shí)現(xiàn)邏輯。

路由器會(huì)根據(jù)用戶請求的URL路徑去匹配自身存儲(chǔ)的在 map 中的 handler ,最終調(diào)用匹配到的 handler 的 ServeHTTP() 以實(shí)現(xiàn)執(zhí)行對應(yīng)路由的處理函數(shù)。

創(chuàng)建 http.ServeMux 實(shí)例的方式有兩種

http.DefaultServeMux 是默認(rèn)的 http.ServeMux ,會(huì)隨著 net/http 包初始化而被自動(dòng)初始化。

當(dāng) http.ListenAndServe() 在沒有提供其他處理器的情況下,即它的入?yún)?handler 為 nil 時(shí)內(nèi)部會(huì)使用 http.DefaultServeMux 。

net/http 包提供了一組快捷的注冊路由的函數(shù) http.Handle() 、 http.HandleFunc() 來配置 http.DefaultServeMux ,快捷函數(shù)會(huì)將處理器注冊到 http.DefaultServeMux 。

二者之間的區(qū)別在于 handler 參數(shù)上

http.Handle() 的 handler 是一個(gè) http.Handler 接口實(shí)例,也就是說傳入的 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 類型的對象。同時(shí)自定義的函數(shù)類型中已經(jīng)實(shí)現(xiàn)了 ServeHTTP() 方法,因此它也是一個(gè) http.Handler 。

例如:返回時(shí)使用一個(gè)到 http.HandlerFunc 類型的隱式轉(zhuǎn)換

net/http 包提供了 http.NewServeMux() 來創(chuàng)建一個(gè)自定義的 http.ServeMux 實(shí)例

例如:調(diào)用 http.NewServeMux() 會(huì)創(chuàng)建服務(wù)復(fù)用器

例如:創(chuàng)建靜態(tài)服務(wù)

Go中沒有繼承、多態(tài),可通過接口來實(shí)現(xiàn)。而接口則是定義聲明的函數(shù)簽名,任何結(jié)構(gòu)體只要實(shí)現(xiàn)與接口函數(shù)簽名相同的方法,即等同于實(shí)現(xiàn)了對應(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() 方法,也就是說只要具有 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īng)用于哪些方面?

Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。

Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。

Go語言能干什么?

1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;

2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);

3、網(wǎng)絡(luò)編程:大量優(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語言;

7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實(shí)現(xiàn)的;

8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。

如何學(xué)習(xí)go語言的net/http包

1、看go自帶的文檔

godoc -http=localhost:999

2、看go for web和go并發(fā)編程者兩本書

附上學(xué)習(xí)資料


網(wǎng)頁名稱:go語言http包的簡單介紹
網(wǎng)頁鏈接:http://weahome.cn/article/hipsie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部