go語言數據檢索 go語言數據分析

GO語言(三十二):訪問關系型數據庫(下)

在本節中,您將使用 Go 執行 SQL INSERT語句以向數據庫添加新行。

在曹妃甸等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站建設 網站設計制作定制設計,公司網站建設,企業網站建設,品牌網站建設,成都全網營銷,外貿網站建設,曹妃甸網站建設費用合理。

您已經了解了如何使用Query和QueryRow處理返回數據的 SQL 語句。要執行 不 返回數據的 SQL 語句,請使用Exec.

1、在albumByID下面,粘貼以下addAlbum函數以在數據庫中插入新專輯,然后保存 main.go。

在此代碼中:

(1)用DB.Exec執行INSERT語句。

Exec接受一條 SQL 語句,后跟 SQL 語句的參數值。

(2)檢查嘗試INSERT中的錯誤。

(3)使用Result.LastInsertId檢索插入的數據庫行的 ID 。

(4)檢查嘗試檢索 ID 的錯誤。

2、更新main以調用新addAlbum函數。

在main函數末尾添加以下代碼。

在新代碼中:

(1)調用addAlbum添加新專輯,將要添加的專輯的 ID 分配給albID變量。

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

恭喜!您剛剛使用 Go 對關系數據庫執行了簡單的操作。

本節包含您使用本教程構建的應用程序的代碼。

Go語言 排序與搜索切片

Go語言標準庫中提供了sort包對整型,浮點型,字符串型切片進行排序,檢查一個切片是否排好序,使用二分法搜索函數在一個有序切片中搜索一個元素等功能。

關于sort包內的函數說明與使用,請查看

在這里簡單講幾個sort包中常用的函數

在Go語言中,對字符串的排序都是按照字節排序,也就是說在對字符串排序時是區分大小寫的。

二分搜索算法

Go語言中提供了一個使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比較㏒?n個元素,其中n為切片中元素的總數。

sort.Search(size,fn)函數接受兩個參數:所處理的切片的長度和一個將目標元素與有序切片的元素相比較的函數,該函數是一個閉包,如果該有序切片是升序排列,那么在判斷時使用 有序切片的元素 = 目標元素。該函數返回一個int值,表示與目標元素相同的切片元素的索引。

在切片中查找出某個與目標字符串相同的元素索引

Go 使用 GraphQL - 基礎教程

歡迎golang同胞!在本教程中,我們將研究如何在基于 Go 的程序中與 GraphQL 服務器進行交互。在本教程結束時,我們應該知道如何執行以下操作:

在本教程中,我們將專注于學習 GraphQL 的數據檢索方面,并且我們將使用內存中的數據源來支持它。這應該為我們在后續教程的基礎上建立一個良好的基礎。

好的,所以在我們深入研究之前,我們應該真正了解 GraphQL 的基礎知識。作為開發人員,使用它對我們有什么好處?

好吧,考慮使用每天處理數十萬甚至數百萬請求的系統。傳統上,我們會使用位于數據庫前面的系統 API,它會返回大量 JSON 響應,其中包含許多我們可能不一定需要的冗余信息。

如果我們正在處理大規模的應用程序,發送冗余數據的成本可能會很高,并且由于有效負載大小會阻塞我們的網絡帶寬。

GraphQL基本上可以讓我們以減少噪音和描述數據,我們希望讓我們的檢索,從我們的API中檢索 只有 我們需要為我們當前的任務/視圖/不管。

這只是該技術為我們提供的眾多好處的一個例子。希望在接下來的教程系列中,我們會提前看到更多這些好處。

需要注意的重要一點是,GraphQL 不像我們傳統的 SQL 那樣是一種查詢語言。它是位于我們 API 前面的抽象, 不 依賴于任何特定的數據庫或存儲引擎。

這真的很酷。我們可以建立一個與現有服務商交互的 GraphQL 服務器,然后圍繞著這個新的 GraphQL 服務器構建,而不必擔心修改現有的 REST API。

讓我們看看 RESTful 方法與 GraphQL 方法有何不同?,F在,假設我們正在構建一個返回該站點上所有教程的服務,如果我們想要特定教程的信息,我們通常會創建一個 API 端點,允許我們根據 ID 檢索特定教程:

如果給定一個 valid ID,這將返回一個響應,看起來像這樣:

現在,假設我們想創建一個小部件,列出該作者撰寫的書籍 5 個帖子。我們可以點擊/author/:id端點以檢索該作者撰寫的所有帖子,然后進行后續調用以檢索前 5 個帖子中的每一個。或者,我們可以制作一個全新的端點來為我們返回這些數據。

這兩種解決方案聽起來都不是特別吸引人,因為它們會創建不需要的請求量或返回過多的數據,這突出了 RESTful 方法開始出現一些裂縫的地方。

這就是 GraphQL 發揮作用的地方。使用 GraphQL,我們可以定義我們希望在查詢中返回的數據的確切結構。所以如果我們想要上面的信息,我們可以創建一個看起來像這樣的查詢:

這將隨后返回我們的教程、該教程的作者和一組表示該作者編寫的教程的教程 ID,而無需發送額外的 x 多個 REST 請求來獲取信息!那有多好?

好的,現在我們對 GraphQL 以及對它的用途有了更多的了解,讓我們在實踐中看看它。

我們將使用graphql-go/graphql實現在 Go 中創建一個簡單的 GraphQL 服務器 。

讓我們首先使用go mod init以下方法初始化我們的項目:

接下來,讓我們創建一個名為main.go. 我們將從簡單開始創建一個非常簡單的 GraphQL 服務器,它具有一個非常簡單的解析器:

現在,如果我們嘗試運行它,讓我們看看會發生什么:

所以,如果一切正常,那么我們就可以設置一個非常簡單的 GraphQL 服務器并對這個服務器進行非常簡單的查詢。

讓我們分解上面代碼中發生的事情,以便我們可以進一步擴展它。在lines 14-21我們定義我們的Schema. 當我們對我們的 GraphQL API 進行查詢時,我們基本上定義了我們想要返回給我們的對象上的哪些字段,因此我們必須在我們的 Schema 重新定義這些字段。

在 上line 17,我們定義了一個解析器函數,每當field請求此特定內容時就會觸發該解析器函數。現在,我們只是返回字符串 "world",但我們將實現從這里查詢數據庫的能力。

讓我們看一下main.go文件的第二部分。在line 30我們開始定義query請求領域hello。

然后我們創建一個params結構,其中包含對我們定義的Schema以及我們的RequestString請求的引用 。

最后,在line 36我們執行請求并將請求的結果填充到r. 然后我們進行一些錯誤處理,然后將響應編組為 JSON 并將其打印到我們的控制臺上。

現在我們已經啟動并運行了一個非常簡單的 GraphQL 服務器,并且我們能夠對其進行查詢,讓我們更進一步,構建一個更復雜的示例。

我們將創建一個 GraphQL 服務器,它返回一系列內存中的教程及其作者,以及對這些特定教程的任何評論。

讓我們定義一些struct代表 a Tutorial、 anAuthor和 a 的's Comment:

然后我們可以創建一個非常簡單的populate()函數,它將返回一個類型數組Tutorial:

這將為我們提供一個簡單的教程列表,然后我們可以稍后解決。

我們將從使用 GraphQL 創建一個新對象開始graphql.NewObject()。我們將使用 GraphQL 的嚴格類型定義 3 種不同的類型,它們將與structs我們已經定義的 3 種相匹配。

我們的Commentstruct 可以說是最簡單的,它只包含一個 string Body,所以我們可以commentType很容易地將其表示為:

接下來,我們將處理該Author結構并將其定義為一個新的 graphql.NewObject(). 這會稍微復雜一些,因為它既有一個 String字段,也有一個Int值列表,這些值代表他們編寫的教程的 ID。

最后,讓我們定義我們的tutorialTypewhich 將封裝 an author和comment's的數組以及 anID和 a title:

現在我們已經定義了我們的Type系統,讓我們著手更新我們的 Schema 以反映這些新類型。我們將定義 2 個 distinct Field,第一個將是我們的tutorial字段,它允許我們Tutorials 根據傳入查詢的 ID檢索個人。第二個將是一個list字段,它將允許我們檢索Tutorials我們在內存中定義的完整數組。

所以我們已經創建了我們的類型并更新了我們的 GraphQL 模式,我們做得還不錯!

讓我們嘗試使用我們的新 GraphQL 服務器并處理我們提交的查詢。讓我們來嘗試我們的list架構改變query ,我們已經在我們得到main()的功能:

讓我們分解一下。所以在我們的查詢中,我們有一個特殊的root對象。然后我們在其中說我們想要該list對象上的字段。在返回的名單list,我們希望看到的id,title,comments和 author。

當我們運行它時,我們應該會看到以下輸出:

正如我們所見,我們的查詢以 JSON 格式返回了我們所有的教程,看起來非常像我們初始查詢的結構。

現在讓我們嘗試對我們的tutorial模式進行查詢:

再一次,當我們運行它時,我們應該看到它已經成功地檢索了內存中的單獨教程ID=1:

完美,看起來我們已經讓list我們的tutorial模式和我們的模式都按預期工作了。

這就是我們將在這個初始教程中介紹的全部內容。我們已經成功地設置了一個簡單的 GraphQL 服務器,該服務器由內存數據存儲支持。

在下一個教程中,我們將研究 GraphQL 突變并更改我們的數據源以使用 SQL 數據庫

go語言select的作用

Go里面提供了一個關鍵字select,通過select可以監聽channel上的數據流動。

select的用法與switch語言非常類似,由select開始一個新的選擇塊,每個選擇條件由case語句來描述。

與switch語句相比, select有比較多的限制,其中最大的一條限制就是每個case語句里必須是一個IO操作,大致的結構如下:

在一個select語句中,Go語言會按順序從頭至尾評估每一個發送和接收的語句。

如果其中的任意一語句可以繼續執行(即沒有被阻塞),那么就從那些可以執行的語句中任意選擇一條來使用。

如果沒有任意一條語句可以執行(即所有的通道都被阻塞),那么有兩種可能的情況:

如果給出了default語句,那么就會執行default語句,同時程序的執行會從select語句后的語句中恢復。

如果沒有default語句,那么select語句將被阻塞,直到至少有一個通信可以進行下去

有時候會出現goroutine阻塞的情況,那么我們如何避免整個程序進入阻塞的情況呢?我們可以利用select來設置超時,通過如下的方式實現:

select總結:

作用: 用來監聽 channel 上的數據流動方向。 讀?寫?

select實現fibonacci數列:

網站名稱:go語言數據檢索 go語言數據分析
本文來源:http://m.kartarina.com/article10/hgjhdo.html

成都網站建設公司_創新互聯,為您提供商城網站、搜索引擎優化外貿網站建設、企業網站制作、移動網站建設用戶體驗

廣告

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

成都定制網站網頁設計
主站蜘蛛池模板: 亚洲精品无码久久毛片波多野吉衣| 久久午夜福利无码1000合集| 暴力强奷在线播放无码| 国产网红主播无码精品 | 无码人妻丰满熟妇啪啪网站牛牛| 久久AV无码精品人妻糸列| 无码国产亚洲日韩国精品视频一区二区三区 | 国产成人无码av在线播放不卡 | 亚洲a∨无码男人的天堂| 日产无码1区2区在线观看| 亚洲成AV人片在线观看无码| 蕾丝av无码专区在线观看| 综合无码一区二区三区四区五区 | 亚洲AV日韩AV永久无码绿巨人 | 无码AV天堂一区二区三区| 在线看片无码永久免费aⅴ| 日韩精品无码免费一区二区三区| 国产精品无码专区在线观看| 高清无码午夜福利在线观看| 亚洲AV无码专区国产乱码电影| 亚洲国产精品成人AV无码久久综合影院| 亚洲AV成人无码天堂| 青青草无码免费一二三区| 中文字幕精品无码一区二区| 无码国产亚洲日韩国精品视频一区二区三区 | 日韩精品无码Av一区二区| 欧洲精品无码成人久久久| 亚洲国产成人精品无码区在线秒播| 久久久久久亚洲av成人无码国产| 久久国产精品无码网站| 麻豆人妻少妇精品无码专区| 内射人妻无套中出无码| 亚欧无码精品无码有性视频| 国产成人无码A区在线观看导航| 国语成本人片免费av无码| 无码精品不卡一区二区三区 | 日韩精品久久无码中文字幕| 无码精品国产一区二区三区免费| 国产成A人亚洲精V品无码性色| 亚洲成a人片在线观看无码专区| 亚洲AV无码一区东京热|