中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

go語言gin性能 golang框架gin

GO語言(十三):使用 Go 和 Gin 開發(fā) RESTful API(下)

當客戶端在 發(fā)出POST請求時/albums,您希望將請求正文中描述的專輯添加到現(xiàn)有專輯數(shù)據(jù)中。

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為霍爾果斯等服務(wù)建站,霍爾果斯等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為霍爾果斯企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

為此,您將編寫以下內(nèi)容:

1、編寫代碼

a.添加代碼以將專輯數(shù)據(jù)添加到專輯列表。

在此代碼中:

1)用于Context.BindJSON 將請求正文綁定到newAlbum。

2) album將從 JSON 初始化的結(jié)構(gòu)附加到albums 切片。

3)向響應(yīng)添加201狀態(tài)代碼,以及表示您添加的專輯的 JSON。

b.更改您的main函數(shù),使其包含該router.POST函數(shù),如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數(shù)相關(guān)聯(lián)。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關(guān)聯(lián)。這樣,您可以根據(jù)客戶端使用的方法將發(fā)送到單個路徑的請求單獨路由。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.從包含 main.go 的目錄中的命令行,運行代碼。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示添加專輯的標題和 JSON。

d.與上一節(jié)一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。

該命令應(yīng)顯示專輯列表。

當客戶端向 發(fā)出請求時GET /albums/[id],您希望返回 ID 與id路徑參數(shù)匹配的專輯。

為此,您將:

a.在您在上一節(jié)中添加的函數(shù)下方postAlbums,粘貼以下代碼以檢索特定專輯。

此getAlbumByID函數(shù)將提取請求路徑中的 ID,然后找到匹配的專輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數(shù)。當您將此處理程序映射到路徑時,您將在路徑中包含參數(shù)的占位符。

(2)循環(huán)album切片中的結(jié)構(gòu),尋找其ID 字段值與id參數(shù)值匹配的結(jié)構(gòu)。如果找到,則將該album結(jié)構(gòu)序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應(yīng)返回。

如上所述,實際使用中的服務(wù)可能會使用數(shù)據(jù)庫查詢來執(zhí)行此查找。

(3)如果找不到專輯,則返回 HTTP 404錯誤。

b.最后,更改您的main,使其包含對router.GET的新調(diào)用,路徑現(xiàn)在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關(guān)聯(lián)。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數(shù)。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務(wù)器。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務(wù)。

本節(jié)包含您使用本教程構(gòu)建的應(yīng)用程序的代碼。

「go商城」gin+gorm實現(xiàn)CRUD

ORM-Object-Relationl Mapping,即對象關(guān)系映射,這里的Relationl指的是關(guān)系型數(shù)據(jù)庫

它的作用是在關(guān)系型數(shù)據(jù)庫和對象之間作一個映射,這樣,我們在具體的操作數(shù)據(jù)庫的時候,就不需要再去和復(fù)雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了

GORM就是go語言實現(xiàn)的一個ORM庫

特點:

增加(Create)

檢索(Retrieve)

更新(Update)

刪除(Delete)

如果模型中有 DeletedAt 字段,它將自動擁有軟刪除的能力!當執(zhí)行刪除操作時,數(shù)據(jù)并不會永久的從數(shù)據(jù)庫中刪除,而是將 DeletedAt 的值更新為當前時間。

具體的使用可查看gorm 官方文檔

在項目中我們定義一個全局的GVA_DB,方便使用時調(diào)用

后續(xù)我們在需要查詢數(shù)據(jù)庫時便可直接通過global.GVA_DB使用

比如創(chuàng)建商品信息:

我們先通過查詢分類是否存在,然后再創(chuàng)建商品

通過gorm的鏈式操作可以很方便的進行crud操作

分頁查詢是項目中經(jīng)常使用到的功能,當指定條件查詢的數(shù)據(jù)量過大時,如果我們將數(shù)據(jù)一次性返回,會對數(shù)據(jù)庫造成較大的負荷,同時降低接口的性能,通常我們會使用分頁查詢的方式讓數(shù)據(jù)進行分段展示,從而保障接口的性能。在gorm中我們實用Offset,和Count來實現(xiàn)分頁

我們通過前端的傳遞過來的分頁數(shù)據(jù)進行查詢

該商城作為gin的學習項目,沒有很復(fù)雜的邏輯,所有業(yè)務(wù)邏輯均通過Mysql實現(xiàn)。包括后面將要介紹的登錄態(tài),也是如此。

所有代碼已上傳github,有興趣的可以訪問,如果有更好的建議也歡迎提交issure,pr

怎樣學習GO語言?

golang學習比較簡單,不過任何一門語言都不是孤立存在的,在這里簡要說明一下golang開發(fā)的學習路線

1.golang基礎(chǔ),包括go語言安裝,go語言語法,流程控制語句,函數(shù),方法,面向?qū)ο蟾拍?,網(wǎng)絡(luò)編程,并發(fā)編程等

2.golang開發(fā)框架,包括beego,gin,Iris,Echo等

3.微服務(wù)開發(fā)

4.深入的話還可以學習算法部分。如果要接觸區(qū)塊鏈相關(guān)技術(shù)的話,還需要學習區(qū)塊鏈的加密算法等相關(guān)知識

5.如果要結(jié)合go實現(xiàn)應(yīng)用的話,肯定離不開各種數(shù)據(jù)庫,比如關(guān)系型數(shù)據(jù)庫oracle、mysql,或者各類非關(guān)系型數(shù)據(jù)庫等等

6.如果需要開發(fā)界面的話,還需要學習網(wǎng)頁編程如html,javascript,vue,elementUI,bootstrap等網(wǎng)頁開發(fā)技術(shù)和框架。

7.在以上學習的基礎(chǔ)上還可以向架構(gòu)方面深入學習。

鏈喬教育在線祝您學有所成。

golang 有哪些比較穩(wěn)定的 web 開發(fā)框架

第一個:Beego框架

Beego框架是astaxie的GOWeb開發(fā)的開源框架。Beego框架最大的特點是由八個大的基礎(chǔ)模塊組成,八大基礎(chǔ)模塊的特點是可以根據(jù)自己的需要進行引入,模塊相互獨立,模塊之間耦合性低。

相應(yīng)的Beego的缺點就是全部使用時比較臃腫,通過bee工具來構(gòu)建項目時,直接生成項目目錄和耦合關(guān)系,從而會導致在項目開發(fā)過程中受制性較大。

第二個:Gin框架

Gin是一個GOlang的微框架,封裝比較優(yōu)雅,API友好,源碼注釋比較明確,已經(jīng)發(fā)布了1.0版本;具有快速靈活、容錯方便等特點,其實對于golang而言,web框架的依賴遠比Python、Java更小。

目前在很多使用golang的中小型公司中進行業(yè)務(wù)開發(fā),使用Gin框架的很多,大家如果想使用golang進行熟練Web開發(fā),可以多關(guān)注一下這個框架。

第三個:Iris框架

Iris框架在其官方網(wǎng)站上被描述為GO開發(fā)中最快的Web框架,并給出了多框架和多語言之前的性能對比。目前在github上,Iris框架已經(jīng)收獲了14433個star和1493個fork,可見是非常受歡迎的。

在實際開發(fā)中,Iris框架與Gin框架的學習曲線幾乎相同,所以掌握了Gin就可以輕松掌握Iris框架。

第四個:Echo框架

也是golang的微型Web框架,其具備快速HTTP路由器、支持擴展中間件,同時還支持靜態(tài)文件服務(wù)、Websocket以及支持制定綁定函數(shù),制定相應(yīng)渲染函數(shù),并允許使用任意的HTML模版引擎。

go語言的webengine叫什么

Java教程

Linux入門

更多

首頁

?

Go語言WEB框架(Gin)詳解

在 Go語言開發(fā)的 Web 框架中,有兩款著名 Web 框架分別是 Martini 和 Gin,兩款 Web 框架相比較的話,Gin 自己說它比 Martini 要強很多。

Gin 是 Go語言寫的一個 web 框架,它具有運行速度快,分組的路由器,良好的崩潰捕獲和錯誤處理,非常好的支持中間件和 json??傊?Go語言開發(fā)領(lǐng)域是一款值得好好研究的 Web 框架,開源網(wǎng)址:

首先下載安裝 gin 包:

go get -u github.com/gin-gonic/gin

一個簡單的例子:

package main

import "github.com/gin-gonic/gin"

func main() {

//Default返回一個默認的路由引擎

r := gin.Default()

r.GET("/ping", func(c *gin.Context) {

//輸出json結(jié)果給調(diào)用方

c.JSON(200, gin.H{

"message": "pong",

})

})

r.Run() // listen and serve on 0.0.0.0:8080

}

編譯運行程序,打開瀏覽器,訪問頁面顯示:

{"message":"pong"}

gin 的功能不只是簡單輸出 Json 數(shù)據(jù)。它是一個輕量級的 WEB 框架,支持 RestFull 風格 API,支持 GET,POST,PUT,PATCH,DELETE,OPTIONS 等 http 方法,支持文件上傳,分組路由,Multipart/Urlencoded FORM,以及支持 JsonP,參數(shù)處理等等功能,這些都和 WEB 緊密相關(guān),通過提供這些功能,使開發(fā)人員更方便地處理 WEB 業(yè)務(wù)。

Gin 實際應(yīng)用

接下來使用 Gin 作為框架來搭建一個擁有靜態(tài)資源站點,動態(tài) WEB 站點,以及 RESTFull API 接口站點(可專門作為手機 APP 應(yīng)用提供服務(wù)使用)組成的,亦可根據(jù)情況分拆這套系統(tǒng),每種功能獨立出來單獨提供服務(wù)。

下面按照一套系統(tǒng)但采用分站點來說明,首先是整個系統(tǒng)的目錄結(jié)構(gòu),website 目錄下面 static 是資源類文件,為靜態(tài)資源站點專用;photo 目錄是 UGC 上傳圖片目錄,tpl 是動態(tài)站點的模板。

當然這個目錄結(jié)構(gòu)是一種約定,可以根據(jù)情況來修改。整個項目已經(jīng)開源,可以訪問來詳細了解:具體每個站點的功能怎么實現(xiàn)呢?請看下面有關(guān)每個功能的講述:

靜態(tài)資源站點

一般網(wǎng)站開發(fā)中,我們會考慮把 js,css,以及資源圖片放在一起,作為靜態(tài)站點部署在 CDN,提升響應(yīng)速度。采用 Gin 實現(xiàn)起來非常簡單,當然也可以使用 net/http 包輕松實現(xiàn),但使用 Gin 會更方便。

不管怎么樣,使用 Go 開發(fā),我們可以不用花太多時間在 WEB 服務(wù)環(huán)境搭建上,程序啟動就直接可以提供 WEB 服務(wù)了。

package main

import (

"net/http"

"github.com/gin-gonic/gin"

)

func main() {

router := gin.Default()

// 靜態(tài)資源加載,本例為css,js以及資源圖片

router.StaticFS("/public", http.Dir("D:/goproject/src/github.com/ffhelicopter/tmm/website/static"))

router.StaticFile("/favicon.ico", "./resources/favicon.ico")

// Listen and serve on 0.0.0.0:80

router.Run(":80")

}

首先需要是生成一個 Engine,這是 gin 的核心,默認帶有 Logger 和 Recovery 兩個中間件。

router := gin.Default()

StaticFile 是加載單個文件,而 StaticFS 是加載一個完整的目錄資源:

func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes

func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) IRoutes

這些目錄下資源是可以隨時更新,而不用重新啟動程序?,F(xiàn)在編譯運行程序,靜態(tài)站點就可以正常訪問了。

Golang web 框架對比

由于 golang 提供了完善的net/http標準庫,基于該標準庫實現(xiàn)一個web框架的難度相比其他語言低了不少,所以go web框架簡直就是百花齊放。從老牌的revel和 beego ,到新出的 gin ,和 iris 等,而且還有一些類似于 chi 這種router。個人一般小項目,尤其是中間件需要暴露一些http接口的,基本就使用chi即可。

本次測試主要是gin iris echo 這三個框架。側(cè)重在于高性能,從并發(fā)和json序列化和反序列化兩個方面來測評,畢竟后臺項目側(cè)重的也就是這兩個方面。

為了選擇符合重IO的框架,現(xiàn)設(shè)定如下場景的demo,demo的具體要求如下:

gin:

iris:

echo:

由于要測試5種body樣本,4種場景,4個框架,因此把重點數(shù)據(jù)篩選出來(吞吐量、錯誤率和99%Line,重要性依次遞減),結(jié)果都繪制了圖形,方便比對查看。

綜合以上各個測試結(jié)果可以看出,gin以及iris都是非常優(yōu)秀的框架,gin的優(yōu)勢比其他稍微大點,iris次之,而echo相應(yīng)差一點。

本次測試只是簡單測試了一下3個框架的并發(fā)和json相關(guān)。對比結(jié)果,不包括生態(tài)和工具的完善度等等。如果測試有什么不完善的地方,歡迎交流。

另外歡迎大家試用和star另外一個web框架 baa ,為了避嫌我沒有貼出baa的數(shù)據(jù),性能測試處于gin之后和iris之間。

文章標題:go語言gin性能 golang框架gin
標題網(wǎng)址:http://www.rwnh.cn/article8/doohcip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、用戶體驗、App開發(fā)企業(yè)網(wǎng)站制作、面包屑導航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計
清水河县| 泰州市| 永平县| 绿春县| 广南县| 新安县| 长春市| 卢湾区| 荥经县| 抚远县| 乌兰察布市| 冷水江市| 沁源县| 北碚区| 兴仁县| 博兴县| 区。| 长白| 新昌县| 阜阳市| 兴安盟| 萝北县| 陆良县| 即墨市| 巍山| 鲜城| 株洲县| 察哈| 铜鼓县| 德化县| 阳朔县| 远安县| 泸定县| 双城市| 和硕县| 大石桥市| 会东县| 丽江市| 长垣县| 辽阳县| 卢湾区|