之前寫過了Go語言gorm框架MySQL實踐,其中對gorm框架在操作MySQL的各種基礎(chǔ)實踐,下面分享一下如何使用gorm框架對MySQL直接進(jìn)行性能測試的簡單實踐。
10年積累的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有古雷港免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
這里我使用了一個原始的Go語言版本的 FunTester 測試框架,現(xiàn)在只有一個基本的方法,實在是因為Go語言特性太強(qiáng)了。框架設(shè)計的主要思路之一就是利用Go語言的閉包和方法參數(shù)特性,將一個 func() 當(dāng)做性能測試的主題,通過不斷運(yùn)行這個 func() 來實現(xiàn)性能測試。當(dāng)然還有另外一個思路就是運(yùn)行一個多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測試資源,適配更多的測試場景。
下面演示select的性能測試,這里我用了隨機(jī)ID查詢的場景。
這里我使用從35開始遞增的ID進(jìn)行刪除。
這里使用了select的用例部分,隨機(jī)ID,然后更新name字段,隨機(jī)10個長度的字符串。
這里用到了 FunTester 字段都是隨機(jī)生成。
到這里可以看出,性能測試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說非常牛逼,我們只需要設(shè)置幾個參數(shù)。這個使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來都是非常簡單的。
PS:關(guān)于gorm的基礎(chǔ)使用的請參考上一期的文章Go語言gorm框架MySQL實踐。
越高級,越復(fù)雜的查詢,也同時意味著高耗,但是平時有一些數(shù)據(jù)少,但是業(yè)務(wù)復(fù)雜的場景,可以使用下。 這里主要說明的是 go 中使用 gorm 進(jìn)務(wù)查詢。
有時候代碼是可需要映射到一個 map 結(jié)構(gòu), 不需要映射到一個 結(jié)構(gòu)體中,可以寫成如下:
在涉及并發(fā)的場景,往往需要加鎖互斥,和 Java 類似, Go 中也有加行鎖的方式,加 for update 即可。
一般寫法如下:
示例代碼:
有時候,我們需要進(jìn)行簡單的數(shù)據(jù)統(tǒng)計, 比如查詢到結(jié)果有多少行,
有時候也需要分組統(tǒng)計行數(shù)
有時候我們會使用到數(shù)據(jù)統(tǒng)計的功能, 比如根據(jù)數(shù)據(jù)庫字段 batch_no 進(jìn)行分組,然后統(tǒng)計總金額,總筆數(shù)。
分組查詢統(tǒng)計一般的寫法如下:
代碼示例:
一般來說,很少使用關(guān)聯(lián)查詢,但是如果要使用關(guān)聯(lián)查詢,可以如下:
Scopes 允許你指定常用的查詢,可以在調(diào)用方法時引用這些查詢, 也就是說,可以在查詢中使用函數(shù)。
舉個例子:
在這里插入圖片描述
gorm安裝
gorm框架是go的一個數(shù)據(jù)庫連接及交互框架,一般用于連接關(guān)系型數(shù)據(jù)庫。
安裝gorm,使用命令安裝:
go get -u -v github點抗 /jinzhu/gorm
連接數(shù)據(jù)庫
構(gòu)建連接的目標(biāo)為數(shù)據(jù)庫中某一個庫,同大多數(shù)框架一樣使用url進(jìn)行連接,url基本格式:
用戶名:密碼@連接方式(ip:port)/數(shù)據(jù)庫名?參數(shù)
參數(shù)描述:
用戶名 :連接數(shù)據(jù)庫用戶名
密碼 :連接數(shù)據(jù)庫密碼
連接方式 :或稱為訪問協(xié)議,一般為tcp
ip :數(shù)據(jù)庫所在服務(wù)器地址
port :數(shù)據(jù)庫監(jiān)聽端口
數(shù)據(jù)庫名 :數(shù)據(jù)庫中對應(yīng)要連接庫名
參數(shù) :附加數(shù)據(jù)庫參數(shù),根據(jù)數(shù)據(jù)庫不同內(nèi)容不同
確定url后,就可以調(diào)用gorm中參數(shù)進(jìn)行連接數(shù)據(jù)庫操作:
別忘記import語句導(dǎo)入包:
操作完數(shù)據(jù)庫后不要忘了關(guān)閉連接:
表操作
創(chuàng)建表
gorm創(chuàng)建表基于結(jié)構(gòu)體,所以創(chuàng)建表前要先用結(jié)構(gòu)體規(guī)劃表結(jié)構(gòu),這里簡單寫一個結(jié)構(gòu)體,創(chuàng)建表時默認(rèn)結(jié)構(gòu)體第一個字段作為主鍵:
寫好結(jié)構(gòu)體后,調(diào)用創(chuàng)建表語句直接按照結(jié)構(gòu)體結(jié)構(gòu)創(chuàng)建表:
當(dāng)直接創(chuàng)建表時,表名遵循規(guī)范:
1、大寫字母全部小寫,所有位于中間的大寫字母都變成小寫字母并且前面加下劃線,例如UserInfo結(jié)構(gòu)體創(chuàng)建為表名稱為user_infos。
2、上面最后的那個s是因為直接創(chuàng)建表時,名稱最后都會加上一個s。所以上面結(jié)構(gòu)體User創(chuàng)建表后名稱為users。
刪除表
增刪改查
插入數(shù)據(jù)
插入數(shù)據(jù),插入數(shù)據(jù)方法結(jié)構(gòu)使用Create方法:
查詢數(shù)據(jù)
查詢第一條找到的數(shù)據(jù),使用First,該方法返回值仍然為db對象,所以接收數(shù)據(jù)時我們需要先定義一個對應(yīng)表結(jié)構(gòu)的結(jié)構(gòu)體接收數(shù)據(jù):
有First就有Last,同F(xiàn)irst調(diào)用格式一致。
批量查詢,批量查詢使用Find方法,其余參數(shù)結(jié)構(gòu)同F(xiàn)irst或Last相同,只不過傳參時一般傳入數(shù)組參數(shù),當(dāng)然,F(xiàn)irst或Last方法也可以傳入數(shù)組參數(shù),但得到的數(shù)組只有一個數(shù)據(jù),批量查詢操作:
更新數(shù)據(jù)
刪除內(nèi)容
在寫sql語句時,where的條件主要是 key=1 and key2=2 或者 key=1 or key2=2 這種形式[還有 and與or 混合]。
認(rèn)真分析會發(fā)現(xiàn)條件有 4部分 組成-- 字段名、操作符、查詢值、與前一個條件的關(guān)系[and,or] ,這樣就很容易實現(xiàn)了。下面就是一個說明,為了簡化,其中會默認(rèn)省略一些特征。
啟動項目
訪問測試地址:
帶分頁的地址:
網(wǎng)站名稱:go語言gorm獲取索引 go語言調(diào)用so
文章地址:http://jinyejixie.com/article48/ddieohp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、動態(tài)網(wǎng)站、小程序開發(fā)、網(wǎng)站排名、網(wǎng)站設(shè)計、定制網(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)