日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang 包含文本_Golang教程之Web篇(七)

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang 包含文本_Golang教程之Web篇(七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,大家一起思考一個問題:何為Web編程?

嚴格來說,這只是一個叫法,并沒有學術上的定義,但是一般大家都說到web都是指瀏覽器相關,所以大家一般說的web開發要么是PC Web要么就是手機Web,不過從廣義上講App也算是web編程的一部分。

當今Web編程主要基于Http協議,無論是瀏覽器還是App,很多都說基于Http,但是也有App直接使用TCP通信,比如IM類。但是從Golang的應用場景來說,Go的Web編程一般是指使用Go開發一些基于Http協議的服務,比如網站網頁、App接口。


Go Http編程

如果把范圍縮小到Http就更容易理解了,Http協議幾乎承載了整個互聯網99%的流量,而且Http協議是文本協議,簡單易懂,便于開發調試。

Http協議的交互模型非常簡單: 一個請求對應一個響應。對于編程語言來說,我們只需要解析出Http請求頭,根據協議理解這個請求,然后使用代碼完成請求的操作,最后把結果包裝好,加上一個響應頭,返回回去就行了。

Golang標準庫里面的 net/http 提供了非常強大的封裝,我們只需幾行代碼就可以啟動一個http服務:

package mainimport "net/http"func main() {//使用閉包函數http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {_, _ = writer.Write([]byte("Hello Worldn"))})//使用自定義函數http.HandleFunc("/say", say)//啟動服務_ = http.ListenAndServe(":8080", nil) }func say(writer http.ResponseWriter, _ *http.Request) {_, _ = writer.Write([]byte("Say Hellon")) }

這些看上去非常簡單,但是功能卻很強大,其底層是針對每一個請求都啟動了一個協程去處理,所以并發能力非常強,可以輕松上萬。

這里說個題外話,Go和PHP在Web開上面差異很大,Go可以理解為自帶Web服務器,而PHP往往依賴于apache或nginx,真正處理PHP請求的是fpm服務,而fpm本質上是使用多進程的方式處理請求。一個進程同一時刻只能處理一個請求,PHP請求之間是進程隔離的,但是對于Go來說,各個請求之間是協程隔離的。 舉個例子,在PHP里面,我們可以使用$_GET或$_POST這種超全局變量獲取到當前的請求,但是Go里面不存在。

Web框架基本要素

http協議是業界標準,很多語言都可以寫http請求以及http服務,但是無論使用什么語言,編寫http服務的基本套路都差不多,其中有一個套路最出名:MVC。

MVC是最早期的一種Web編程套路,現在很多Web框架依然有MVC的影子,但是功能卻復雜很多,這里我總結了一下最常見的功能:

1.路由

路由類似uri,只不過路由更加靈活,路由的主要作用是把請求轉發給對應的控制器,一般路由都是配合REST API使用。但是Go標準庫的http包路由功能非常簡單,只能是固定字符,并不支持正則或者模糊匹配等高級功能。

不過有一些開源的路由庫,比如 httprouter

2.請求和響應

http協議是文本協議,當我們需要獲取請求頭的一些數據的時候,如果手動去解析未必效率太低,很多web框架都會把這些數據包裝好,一般會有2個對象,request和response,方便用戶操作。

3.數據校驗

出于安全考慮,我們需要對http請求的一些輸入數據做校驗,比如說長度、大小、類型、格式,如果都需要手動去一個個判斷效率太低,這時候就需要一種高效的機制去統一處理。

4.中間件

通常叫作middleware,中間件本質上是一種切片編程的方式,使用中間件可以更方便、簡單的實現一些功能!

實際應用中,我們一般使用中間件來實現用戶權限校驗、日志統計等功能

5.數據庫(ORM)

Web開發過程中少不了對數據的操作,而且很多時候我們都是在做一些圍繞著數據庫的CURD操作。如果細分的話還可以分為關系型數據庫和非關系型數據庫,比如mysql、mongo、elastic search

6.緩存

為了提供服務的性能我們往往需要使用緩存來提供QPS,緩存可以細分為服務器內存緩存、外部緩存(如果redis、memcache)

7.cookies和session

http協議本身是無狀態的,如果需要維護用戶狀態,使用cookies和session這種機制也是一種不錯的選擇!


Go常見Web框架

以上這些點,是一個Web框架需要包含的一些要素,在PHP里面有laravel這樣的大而全的框架,在Java界也有ssh這樣的框架。

然而,在Go界,目前還缺少一個非常完美的框架,很多Go框架比較簡潔,只專注入某些功能,但是好在有不少開源庫,我們可以自己整合一個適合自己開發需求的框架。

大部分時候我建議采用框架開發,主要原因是快,而且方便,框架很多設計思想也值得借鑒,下面我推薦一些Go的知名框架:

一、Beego(https://beego.me/)

這個框架是國人寫的,出來比較早了,目錄結構簡單易懂,功能豐富,開箱即用,據說作者之前一直寫PHP

├── conf │ └── app.conf ├── controllers │ ├── admin │ └── default.go ├── main.go ├── models │ └── models.go ├── static │ ├── css │ ├── ico │ ├── img │ └── js └── views├── admin└── index.tpl

這個框架中規中矩,整體是一個非常MVC的架構,基本上功能都有。

二、Gin(https://github.com/gin-gonic/gin)

目前github上面star最多的框架,說是框架,其實缺少很多東西,更像是一個庫,目前只包括了路由、request/response、中間件等功能,雖然缺少數據庫、日志等功能,但是可以自己整合一些開源庫進來。

不過這個框架性能非常高、簡單易用,可以嘗試一下

三、Echo(https://github.com/labstack/echo)

這個也是一個用的人比較多的框架,功能也非常豐富,開箱即用,有很多官方的中間件!

參考資料

Go語言Web編程

總結

以上是生活随笔為你收集整理的golang 包含文本_Golang教程之Web篇(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。