成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言分頁查詢 golang 分表

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

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

成都創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)班戈,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

為此,您將編寫以下內(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)用程序的代碼。

多條件查詢和分頁

//分頁函數(shù)

//定義函數(shù)pageft(),三個參數(shù)的含義為:

//$totle:信息總數(shù);

//$displaypg:每頁顯示信息數(shù),這里設(shè)置為默認是20;

//$url:分頁導航中的鏈接,除了加入不同的查詢信息“page”外的部分都與這個URL相同。

// 默認值本該設(shè)為本頁URL(即$_SERVER["REQUEST_URI"]),但設(shè)置默認值的右邊只能為常量,所以該默認值設(shè)為空字符串,在函數(shù)內(nèi)部再設(shè)置為本頁URL。

function?pageft($totle,?$displaypg?=?20,?$url?=?'',?$shownum?=?1,?$showtext?=?1,?$showselect?=?0,?$showlvtao?=?7)?{

if(empty($totle)){

return?false;

}

$page?=?isset($_GET['page'])?intval($_GET['page']):1;

$url.='/page/';

//頁碼計算:

$lastpg?=?ceil($totle?/?$displaypg);?//最后頁,也是總頁數(shù)

$page?=?min($lastpg,?$page);

$prepg?=?$page?-1;?//上一頁

$nextpg?=?($page?==?$lastpg???0?:?$page?+1);?//下一頁

$firstcount?=?($page?-1)?*?$displaypg;

//開始分頁導航條代碼:

if?($showtext?==?1)?{

$pagenav?=?'div?class="results"span第?'?.?($totle???($firstcount?+1)?:?0)?.?'-'?.?min($firstcount?+?$displaypg,?$totle)?.?'?條?共?'.$totle.'/span/divdivul?class="pager"';

}?else?{

$pagenav?=?"";

}

//如果只有一頁則跳出函數(shù):

//if?($lastpg?=?1)

//return?false;

if?($prepg)

$pagenav?.=?'lia?href="'.$url.$prepg.'"laquo;?上一頁/a/li';

else

$pagenav?.=?'li?class="disabled"laquo;?上一頁/li';

if?($shownum?==?1)?{

$o?=?$showlvtao;?//中間頁碼表總長度,為奇數(shù)

$u?=?ceil($o?/?2);?//根據(jù)$o計算單側(cè)頁碼寬度$u

$f?=?$page?-?$u;?//根據(jù)當前頁$currentPage和單側(cè)寬度$u計算出第一頁的起始數(shù)字

//str_replace('{p}',,$fn)//替換格式

if?($f??0)?{

$f?=?0;

}?//當?shù)谝豁撔∮?時,賦值為0

$n?=?$lastpg;?//總頁數(shù),20頁

if?($n??1)?{

$n?=?1;

}?//當總數(shù)小于1時,賦值為1

if?($page?==?1)?{

$pagenav?.=?'li?class="current"1/li';

}?else?{

$pagenav?.=?'lia?href="'.$url.'1"1/a/li';

}

///////////////////////////////////////

for?($i?=?1;?$i?=?$o;?$i++)?{

if?($n?=?1)?{

break;

}?//當總頁數(shù)為1時

$c?=?$f?+?$i;?//從第$c開始累加計算

if?($i?==?1??$c??2)?{

$pagenav?.=?'li?class="separator".../li';

}

if?($c?==?1)?{

continue;

}

if?($c?==?$n)?{

break;

}

if?($c?==?$page)?{

$pagenav?.=?'li?class="current"'?.?$page?.?'/li';

}?else?{

$pagenav?.=?'lia?href="'.$url.$c.'"'.$c.'/a/li';

}

if?($i?==?$o??$c??$n?-1)?{

$pagenav?.=?'li?class="separator".../li';

}

if?($i??$n)?{

break;

}?//當總頁數(shù)小于頁碼表長度時

}

if?($page?==?$n??$n?!=?1)?{

$pagenav?.=?'li?class="current"'?.?$n?.?'/li';

}?else?{

if?($lastpg??1){

$pagenav?.=?'lia?href="'.$url.$n.'"'.$n.'/a/li';

}

}

}

if?($nextpg)

$pagenav?.=?'lia?href="'.$url.$nextpg.'"下一頁?raquo;/a/li';

else

$pagenav?.=?'li?class="disabled"下一頁?raquo;/li';

$pagenav?.=?'/ul/div';

if?($showselect?==?1)?{

//下拉跳轉(zhuǎn)列表,循環(huán)列出所有頁碼:

$pagenav?.=?"跳至select?name='topage'?size='1'?onchange='window.location=\"$url\"+this.value'\n";

for?($i?=?1;?$i?=?$lastpg;?$i++)?{

if?($i?==?$page)

$pagenav?.=?"option?value='$i'?selected$i/option\n";

else

$pagenav?.=?"option?value='$i'$i/option\n";

}

$pagenav?.=?"/select頁";

}

return?$pagenav;

}

//數(shù)據(jù)查詢頁面

$page?=?array();

$page['url']?=?U('Supervise/myefficiencybooklist',array('Status'=$_GET['Status']));

$page['pagesize']?=?16;

$page['frmnum']?=?($pagenum-1)*$page['pagesize'];

$Efficiencybook?=?M('efficiencybook','app_yhcm_supervise_');

$totle?=?$Efficiencybook-where('uid?=?'.$this-_G['userid'].$where)-count();

$page['totle']?=?$totle;

$this-assign('page',$page);//將分頁參數(shù)復制給模版變量

{:pageft($page['totle'],$page['pagesize'],$page['url'])}

以上是我一個項目里面用到的 ?你適當?shù)母南戮湍苡昧?/p>

go語言對gorm不固定條件查詢封裝

在寫sql語句時,where的條件主要是 key=1 and key2=2 或者 key=1 or key2=2 這種形式[還有 and與or 混合]。

認真分析會發(fā)現(xiàn)條件有 4部分 組成-- 字段名、操作符、查詢值、與前一個條件的關(guān)系[and,or] ,這樣就很容易實現(xiàn)了。下面就是一個說明,為了簡化,其中會默認省略一些特征。

啟動項目

訪問測試地址:

帶分頁的地址:

GO語言(三十):訪問關(guān)系型數(shù)據(jù)庫(上)

本教程介紹了使用 Godatabase/sql及其標準庫中的包訪問關(guān)系數(shù)據(jù)庫的基礎(chǔ)知識。

您將使用的database/sql包包括用于連接數(shù)據(jù)庫、執(zhí)行事務(wù)、取消正在進行的操作等的類型和函數(shù)。

在本教程中,您將創(chuàng)建一個數(shù)據(jù)庫,然后編寫代碼來訪問該數(shù)據(jù)庫。您的示例項目將是有關(guān)老式爵士樂唱片的數(shù)據(jù)存儲庫。

首先,為您要編寫的代碼創(chuàng)建一個文件夾。

1、打開命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創(chuàng)建一個名為 data-access 的目錄。

3、創(chuàng)建一個模塊,您可以在其中管理將在本教程中添加的依賴項。

運行g(shù)o mod init命令,為其提供新代碼的模塊路徑。

此命令創(chuàng)建一個 go.mod 文件,您添加的依賴項將在其中列出以供跟蹤。

注意: 在實際開發(fā)中,您會指定一個更符合您自己需求的模塊路徑。有關(guān)更多信息,請參閱一下文章。

GO語言(二十五):管理依賴項(上)

GO語言(二十六):管理依賴項(中)

GO語言(二十七):管理依賴項(下)

接下來,您將創(chuàng)建一個數(shù)據(jù)庫。

在此步驟中,您將創(chuàng)建要使用的數(shù)據(jù)庫。您將使用 DBMS 本身的 CLI 創(chuàng)建數(shù)據(jù)庫和表,以及添加數(shù)據(jù)。

您將創(chuàng)建一個數(shù)據(jù)庫,其中包含有關(guān)黑膠唱片上的老式爵士樂錄音的數(shù)據(jù)。

這里的代碼使用MySQL CLI,但大多數(shù) DBMS 都有自己的 CLI,具有類似的功能。

1、打開一個新的命令提示符。

在命令行,登錄到您的 DBMS,如下面的 MySQL 示例所示。

2、在mysql命令提示符下,創(chuàng)建一個數(shù)據(jù)庫。

3、切到您剛剛創(chuàng)建的數(shù)據(jù)庫,以便您可以添加表。

4、在文本編輯器的 data-access 文件夾中,創(chuàng)建一個名為 create-tables.sql 的文件來保存用于添加表的 SQL 腳本。

將以下 SQL 代碼粘貼到文件中,然后保存文件。

在此 SQL 代碼中:

(1)刪除名為album表。 首先執(zhí)行此命令可以讓您更輕松地稍后重新運行腳本。

(2)創(chuàng)建一個album包含四列的表:title、artist和price。每行的id值由 DBMS 自動創(chuàng)建。

(3)添加帶有值的四行。

5、在mysql命令提示符下,運行您剛剛創(chuàng)建的腳本。

您將使用以下形式的source命令:

6、在 DBMS 命令提示符處,使用SELECT語句來驗證您是否已成功創(chuàng)建包含數(shù)據(jù)的表。

接下來,您將編寫一些 Go 代碼進行連接,以便進行查詢。

現(xiàn)在你已經(jīng)有了一個包含一些數(shù)據(jù)的數(shù)據(jù)庫,開始你的 Go 代碼。

找到并導入一個數(shù)據(jù)庫驅(qū)動程序,該驅(qū)動程序會將您通過database/sql包中的函數(shù)發(fā)出的請求轉(zhuǎn)換為數(shù)據(jù)庫可以理解的請求。

1、在您的瀏覽器中,訪問SQLDrivers wiki 頁面以識別您可以使用的驅(qū)動程序。

2、使用頁面上的列表來識別您將使用的驅(qū)動程序。為了在本教程中訪問 MySQL,您將使用 Go-MySQL-Driver。

3、請注意驅(qū)動程序的包名稱 - 此處為github.com/go-sql-driver/mysql.

4、使用您的文本編輯器,創(chuàng)建一個用于編寫 Go 代碼的文件,并將該文件作為 main.go 保存在您之前創(chuàng)建的數(shù)據(jù)訪問目錄中。

5、進入main.go,粘貼以下代碼導入驅(qū)動包。

在此代碼中:

(1)將您的代碼添加到main包中,以便您可以獨立執(zhí)行它。

(2)導入 MySQL 驅(qū)動程序github.com/go-sql-driver/mysql。

導入驅(qū)動程序后,您將開始編寫代碼以訪問數(shù)據(jù)庫。

現(xiàn)在編寫一些 Go 代碼,讓您使用數(shù)據(jù)庫句柄訪問數(shù)據(jù)庫。

您將使用指向結(jié)構(gòu)的指針sql.DB,它表示對特定數(shù)據(jù)庫的訪問。

編寫代碼

1、進入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創(chuàng)建數(shù)據(jù)庫句柄。

在此代碼中:

(3)使用 MySQL 驅(qū)動程序Config和FormatDSN類型以收集連接屬性并將它們格式化為連接字符串的 DSN。

該Config結(jié)構(gòu)使代碼比連接字符串更容易閱讀。

(4)調(diào)用sql.Open 初始化db變量,傳遞 FormatDSN。

(5)檢查來自 的錯誤sql.Open。例如,如果您的數(shù)據(jù)庫連接細節(jié)格式不正確,它可能會失敗。

為了簡化代碼,您調(diào)用log.Fatal結(jié)束執(zhí)行并將錯誤打印到控制臺。在生產(chǎn)代碼中,您會希望以更優(yōu)雅的方式處理錯誤。

(6)調(diào)用DB.Ping以確認連接到數(shù)據(jù)庫有效。在運行時, sql.Open可能不會立即連接,具體取決于驅(qū)動程序。您在Ping此處使用以確認 database/sql包可以在需要時連接。

(7)檢查來自Ping的錯誤,以防連接失敗。

(8)Ping如果連接成功,則打印一條消息。

文件的頂部現(xiàn)在應(yīng)該如下所示:

3、保存 main.go。

1、開始跟蹤 MySQL 驅(qū)動程序模塊作為依賴項。

使用go get 添加 github.com/go-sql-driver/mysql 模塊作為您自己模塊的依賴項。使用點參數(shù)表示“獲取當前目錄中代碼的依賴項”。

2、在命令提示符下,設(shè)置Go 程序使用的DBUSER和DBPASS環(huán)境變量。

在 Linux 或 Mac 上:

在 Windows 上:

3、在包含 main.go 的目錄中的命令行中,通過鍵入go run來運行代碼。

連接成功了!

接下來,您將查詢一些數(shù)據(jù)。

本文題目:go語言分頁查詢 golang 分表
文章路徑:http://jinyejixie.com/article8/dopsgip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應(yīng)式網(wǎng)站手機網(wǎng)站建設(shè)、全網(wǎng)營銷推廣商城網(wǎng)站、企業(yè)網(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)

成都app開發(fā)公司
靖西县| 新乡县| 崇礼县| 西城区| 黄陵县| 益阳市| 泗水县| 日照市| 丰台区| 浦城县| 邹城市| 大同县| 仙桃市| 洛阳市| 安康市| 江孜县| 兴城市| 临高县| 青冈县| 探索| 新乐市| 华阴市| 八宿县| 苏尼特右旗| 清水县| 洪湖市| 女性| 宁远县| 萨嘎县| 兰溪市| 柳州市| 台湾省| 梅河口市| 松潘县| 岳普湖县| 灵璧县| 大英县| 巧家县| 嘉义县| 苏尼特左旗| 南溪县|