老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

go語言怎么連接網上的庫 go語言第三方庫

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

本教程介紹了使用 Godatabase/sql及其標準庫中的包訪問關系數據庫的基礎知識。

十余年的新都網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網整合營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整新都建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“新都網站設計”,“新都網站推廣”以來,每個客戶項目都認真落實執行。

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

在本教程中,您將創建一個數據庫,然后編寫代碼來訪問該數據庫。您的示例項目將是有關老式爵士樂唱片的數據存儲庫。

首先,為您要編寫的代碼創建一個文件夾。

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

在 Linux 或 Mac 上:

在 Windows 上:

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

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

運行go mod init命令,為其提供新代碼的模塊路徑。

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

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

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

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

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

接下來,您將創建一個數據庫。

在此步驟中,您將創建要使用的數據庫。您將使用 DBMS 本身的 CLI 創建數據庫和表,以及添加數據。

您將創建一個數據庫,其中包含有關黑膠唱片上的老式爵士樂錄音的數據。

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

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

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

2、在mysql命令提示符下,創建一個數據庫。

3、切到您剛剛創建的數據庫,以便您可以添加表。

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

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

在此 SQL 代碼中:

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

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

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

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

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

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

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

現在你已經有了一個包含一些數據的數據庫,開始你的 Go 代碼。

找到并導入一個數據庫驅動程序,該驅動程序會將您通過database/sql包中的函數發出的請求轉換為數據庫可以理解的請求。

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

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

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

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

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

在此代碼中:

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

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

導入驅動程序后,您將開始編寫代碼以訪問數據庫。

現在編寫一些 Go 代碼,讓您使用數據庫句柄訪問數據庫。

您將使用指向結構的指針sql.DB,它表示對特定數據庫的訪問。

編寫代碼

1、進入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創建數據庫句柄。

在此代碼中:

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

該Config結構使代碼比連接字符串更容易閱讀。

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

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

為了簡化代碼,您調用log.Fatal結束執行并將錯誤打印到控制臺。在生產代碼中,您會希望以更優雅的方式處理錯誤。

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

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

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

文件的頂部現在應該如下所示:

3、保存 main.go。

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

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

2、在命令提示符下,設置Go 程序使用的DBUSER和DBPASS環境變量。

在 Linux 或 Mac 上:

在 Windows 上:

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

連接成功了!

接下來,您將查詢一些數據。

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 語言中使用 Redis 連接池

一、關于連接池

一個數據庫服務器只擁有有限的資源,并且如果你沒有充分使用這些資源,你可以通過使用更多的連接來提高吞吐量。一旦所有的資源都在使用,那么你就不 能通過增加更多的連接來提高吞吐量。事實上,吞吐量在連接負載較大時就開始下降了。通常可以通過限制與可用的資源相匹配的數據庫連接的數量來提高延遲和吞 吐量。

如何在Go語言中使用Redis連接池

如果不使用連接池,那么,每次傳輸數據,我們都需要進行創建連接,收發數據,關閉連接。在并發量不高的場景,基本上不會有什么問題,一旦并發量上去了,那么,一般就會遇到下面幾個常見問題:

性能普遍上不去

CPU 大量資源被系統消耗

網絡一旦抖動,會有大量 TIME_WAIT 產生,不得不定期重啟服務或定期重啟機器

服務器工作不穩定,QPS 忽高忽低

要想解決這些問題,我們就要用到連接池了。連接池的思路很簡單,在初始化時,創建一定數量的連接,先把所有長連接存起來,然后,誰需要使用,從這里取走,干完活立馬放回來。 如果請求數超出連接池容量,那么就排隊等待、退化成短連接或者直接丟棄掉。

二、使用連接池遇到的坑

最近在一個項目中,需要實現一個簡單的 Web Server 提供 Redis 的 HTTP interface,提供 JSON 形式的返回結果。考慮用 Go 來實現。

首先,去看一下 Redis 官方推薦的 Go Redis driver。官方 Star 的項目有兩個:Radix.v2 和 Redigo。經過簡單的比較后,選擇了更加輕量級和實現更加優雅的 Radix.v2。

Radix.v2 包是根據功能劃分成一個個的 sub package,每一個 sub package 在一個獨立的子目錄中,結構非常清晰。我的項目中會用到的 sub package 有 redis 和 pool。

由于我想讓這種被 fork 的進程最好簡單點,做的事情單一一些,所以,在沒有深入去看 Radix.v2 的 pool 的實現之前,我選擇了自己實現一個 Redis pool。(這里,就不貼代碼了。后來發現自己實現的 Redis pool 與 Radix.v2 實現的 Redis pool 的原理是一樣的,都是基于 channel 實現的, 遇到的問題也是一樣的。)

不過在測試過程中,發現了一個詭異的問題。在請求過程中經常會報 EOF 錯誤。而且是概率性出現,一會有問題,一會又好了。通過反復的測試,發現 bug 是有規律的,當程序空閑一會后,再進行連續請求,會發生3次失敗,然后之后的請求都能成功,而我的連接池大小設置的是3。再進一步分析,程序空閑300秒 后,再請求就會失敗,發現我的 Redis server 配置了 timeout 300,至此,問題就清楚了。是連接超時 Redis server 主動斷開了連接。客戶端這邊從一個超時的連接請求就會得到 EOF 錯誤。

然后我看了一下 Radix.v2 的 pool 包的源碼,發現這個庫本身并沒有檢測壞的連接,并替換為新server{location/pool{content_by_lua_block{localredis=require"resty.redis"localred=redis:new()localok,err=red:connect("127.0.0.1",6379)ifnotokthenngx.say("failedtoconnect:",err)returnendok,err=red:set("hello","world")ifnotokthenreturnendred:set_keepalive(10000,100)}}}

發現有個 set_keepalive 的方法,查了一下官方文檔,方法的原型是 syntax: ok, err = red:set_keepalive(max_idle_timeout, pool_size) 貌似 max_idle_timeout 這個參數,就是我們所缺少的東西,然后進一步跟蹤源碼,看看里面是怎么保證連接有效的。

function_M.set_keepalive(self,...)localsock=self.sockifnotsockthenreturnnil,"notinitialized"endifself.subscribedthenreturnnil,"subscribedstate"endreturnsock:setkeepalive(...)end

至此,已經清楚了,使用了 tcp 的 keepalive 心跳機制。

于是,通過與 Radix.v2 的作者一些討論,選擇自己在 redis 這層使用心跳機制,來解決這個問題。

四、最后的解決方案

在創建連接池之后,起一個 goroutine,每隔一段 idleTime 發送一個 PING 到 Redis server。其中,idleTime 略小于 Redis server 的 timeout 配置。連接池初始化部分代碼如下:

p,err:=pool.New("tcp",u.Host,concurrency)errHndlr(err)gofunc(){for{p.Cmd("PING")time.Sleep(idelTime*time.Second)}}()

使用 redis 傳輸數據部分代碼如下:

funcredisDo(p*pool.Pool,cmdstring,args...interface{})(reply*redis.Resp,errerror){reply=p.Cmd(cmd,args...)iferr=reply.Err;err!=nil{iferr!=io.EOF{Fatal.Println("redis",cmd,args,"erris",err)}}return}

其中,Radix.v2 連接池內部進行了連接池內連接的獲取和放回,代碼如下:

//Cmdautomaticallygetsoneclientfromthepool,executesthegivencommand//(returningitsresult),andputstheclientbackinthepoolfunc(p*Pool)Cmd(cmdstring,args...interface{})*redis.Resp{c,err:=p.Get()iferr!=nil{returnredis.NewResp(err)}deferp.Put(c)returnc.Cmd(cmd,args...)}

這樣,我們就有了 keepalive 的機制,不會出現 timeout 的連接了,從 redis 連接池里面取出的連接都是可用的連接了。看似簡單的代碼,卻完美的解決了連接池里面超時連接的問題。同時,就算 Redis server 重啟等情況,也能保證連接自動重連。

go語言怎么連接oracle數據庫

//假設的GOPATH指向C:\gohome

0. 執行 go get github.com/wendal/go-oci8 ,然后肯定是報錯了,沒關系,代碼會下載下來.

1. 首先,你需要安裝mingw到C:\mingw

2. 然后,到Oracle官網,下載OCI及其SDK,解壓到instantclient_11_2 -- 當前最新版

3. 從我的go-oci8庫的windows文件夾,拷貝pkg-config.exe到C:\mingw\bin\,拷貝oci8.pc到C:\mingw\lib\pkg-config\

4. 設置環境變量 PATH ,值為 原有PATH;C:\instantclient_11_2;C:\mingw\bin;

5. 設置環境變量 PKG_CONFIG_PATH,值為 C:\mingw\lib\pkg-config

6. 接下來,就最重要的,就是再執行一次,這次應該能成功的: go get github.com/wendal/go-oci8

7. 測試一下:

cd %GOPATH%/src/github.com/wendal/go-oci8/example

go run oracle.go

#提醒一句, oracle.go里面的寫的密碼是system/123456, 實例名XE

go語言如何連接sql server數據庫

高級!能用上go語言了嗎?不會是Android Studio吧?!

如果是Apk是連不上SQL的,訪問WebService,手機做SQL服務一般用WEB,不用WAP,手機可以直接訪問WEB,無論什么編寫的,如果是特殊需要,那就用WebService去返回查詢結果


網頁題目:go語言怎么連接網上的庫 go語言第三方庫
文章URL:http://www.xueling.net.cn/article/hgeped.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产强被迫伦姧在线观看无码 | 曰本大码熟中文字幕 | 精品人妻av区乱码 | 欧美极品视频一区二区三区 | 久久免费国产精品1 | 青青青国产精品免费观看 | 91精品国产日韩91久久久久久 | 久久ク成人精品中文字幕 | 三级在线国产 | 91污污| 日韩综合中文字幕 | 久久精品国产99久久99久久久 | 久久国产精品久久精品国产 | 久久久久.com| 久久久久久1 | 91短视频免费 | 日韩一线无码AV毛片免费 | 久久久999成人 | 国产精品手机视频一区二区 | 久久久久久综合 | 亚洲午夜精品久久久久久性色 | 仙武帝尊700集在线观看 | 99久久久国产精品免费99 | 黄页在线观看视频 | 日韩在线观看视频免费 | 国产精品久久久久久久久免费看 | 91天天综合 | 中文字幕中文字幕在线 | 国产精品视频二区三区 | 超碰91在线播放 | 无遮挡边吃摸边吃奶边做 | 国产在线观看二区 | 哪里有免费的黄色网址 | 18禁裸乳无遮挡啪啪无码免费 | 成人免费视频网站在线观看 | 大地影院mv高清在线观看免费 | www.国产91 | 东京无码熟妇人妻AV在线网址 | 精品偷拍无码专区亚洲 | 67194成在线观看免费 | 久久精品国产77777蜜臀 |