當客戶端在 發(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>
在寫sql語句時,where的條件主要是 key=1 and key2=2 或者 key=1 or key2=2 這種形式[還有 and與or 混合]。
認真分析會發(fā)現(xiàn)條件有 4部分 組成-- 字段名、操作符、查詢值、與前一個條件的關(guān)系[and,or] ,這樣就很容易實現(xiàn)了。下面就是一個說明,為了簡化,其中會默認省略一些特征。
啟動項目
訪問測試地址:
帶分頁的地址:
本教程介紹了使用 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)