欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang中連接mysql數(shù)據(jù)庫(kù)

 更新時(shí)間:2020年12月05日 15:24:30   作者:陶士涵  
這篇文章主要介紹了golang中連接mysql數(shù)據(jù)庫(kù)的步驟,幫助大家更好的理解和學(xué)習(xí)go語(yǔ)言,感興趣的朋友可以了解下

golang中連接mysql數(shù)據(jù)庫(kù),需要使用一個(gè)第三方類庫(kù)github.com/go-sql-driver/mysql,在這個(gè)類庫(kù)中就實(shí)現(xiàn)了mysql的連接池,并且只需要設(shè)置兩個(gè)參數(shù)就可以實(shí)現(xiàn)

一般連接mysql首先需要調(diào)用sql.Open函數(shù),但是此時(shí)并沒有真正的去連接mysql,而是只創(chuàng)建了一個(gè)Db的對(duì)象而已。當(dāng)執(zhí)行Query或者是Exec方法時(shí),才會(huì)去真正的連接數(shù)據(jù)庫(kù)。

默認(rèn)情況下。每次執(zhí)行sql語(yǔ)句,都會(huì)創(chuàng)建一條tcp連接,執(zhí)行結(jié)束就會(huì)斷掉連接,但是會(huì)保留兩條連接閑置。當(dāng)下次再執(zhí)行 sql時(shí),先用閑置的連接,不夠的時(shí)候再去創(chuàng)建連接。

當(dāng)設(shè)置了Db類下的這兩個(gè)參數(shù),就可以真正的實(shí)現(xiàn)連接池了。

db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)

SetMaxOpenConns(10)是設(shè)置的最大連接數(shù),也就是甭管你多少并發(fā),只能最多創(chuàng)建10條tcp連接,還有要注意的一點(diǎn)是,當(dāng)執(zhí)行完sql,連接轉(zhuǎn)移到rows對(duì)象上,如果rows不關(guān)閉,這條連接不會(huì)被放回池里,其他并發(fā)獲取不到連接會(huì)被阻塞住。
SetMaxIdleConns(5)是設(shè)置的執(zhí)行完閑置的連接,這些就算是執(zhí)行結(jié)束了sql語(yǔ)句還是會(huì)保留著的

測(cè)試的流程是這樣的,首先在代碼中并發(fā)100次執(zhí)行sql,開一個(gè)窗口不停的netstat查看3306端口看tcp連接的情況,可以看到最大就10條tcp連接,執(zhí)行完后會(huì)有5條連接保持住,開一個(gè)窗口看tcpdump中3306端口的數(shù)據(jù)請(qǐng)求情況,在閑置連接的時(shí)候,會(huì)每10秒傳遞數(shù)據(jù)給mysql,使得閑置連接保持住。

mysqlClient.go

先要拉取一下github包,go get github.com/go-sql-driver/mysql

package main

import (
  "database/sql"
  "fmt"
  "time"

  _ "github.com/go-sql-driver/mysql"
)

func main() {
  db, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gocron")
  db.SetMaxOpenConns(10)
  db.SetMaxIdleConns(5)
  //連接數(shù)據(jù)庫(kù)查詢
  for i := 0; i < 100; i++ {
    go func(i int) {
      mSql := "select * from user"
      rows, _ := db.Query(mSql)
      rows.Close() //這里如果不釋放連接到池里,執(zhí)行5次后其他并發(fā)就會(huì)阻塞
      fmt.Println("第 ", i)
    }(i)

  }

  for {
    time.Sleep(time.Second)
  }
}

開一個(gè)窗口不停的netstat

while true;do clear;date;netstat -altupn|grep 3306|grep Client;sleep 1;done

開一個(gè)窗口tcpdump看閑置連接的請(qǐng)求情況,每隔15秒請(qǐng)求一次數(shù)據(jù)

tcpdump -i lo port 3306 -vv

以上就是golang中連接mysql數(shù)據(jù)庫(kù)的詳細(xì)內(nèi)容,更多關(guān)于golang 連接mysql數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go1.16新特性embed打包靜態(tài)資源文件實(shí)現(xiàn)

    Go1.16新特性embed打包靜態(tài)資源文件實(shí)現(xiàn)

    這篇文章主要為大家介紹了Go?1.16新特性embed打包靜態(tài)資源文件的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理

    Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理

    這篇文章主要介紹了Go語(yǔ)言底層原理互斥鎖的實(shí)現(xiàn)原理,Go?sync包提供了兩種鎖類型,分別是互斥鎖sync.Mutex和讀寫互斥鎖sync.RWMutex,都屬于悲觀鎖,更多相關(guān)內(nèi)容需要的朋友可以查看下面文章內(nèi)容
    2022-08-08
  • Go語(yǔ)言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    Go語(yǔ)言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    最近對(duì)golang處理音視頻很感興趣,對(duì)golang音視頻常用庫(kù)goav進(jìn)行了一番研究。自己寫了一個(gè)wav轉(zhuǎn)采樣率的功能。給大家分享一下,中間遇到了不少坑,解決的過程中還是蠻有意思的,希望大家能喜歡
    2022-12-12
  • 為什么Go語(yǔ)言把類型聲明放在后面?

    為什么Go語(yǔ)言把類型聲明放在后面?

    今天小編就為大家分享一篇關(guān)于為什么Go語(yǔ)言把類型聲明放在后面?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 解決Go語(yǔ)言數(shù)據(jù)庫(kù)中null值的問題

    解決Go語(yǔ)言數(shù)據(jù)庫(kù)中null值的問題

    這篇文章主要介紹了解決Go語(yǔ)言數(shù)據(jù)庫(kù)中null值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作

    Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作

    這篇文章主要介紹了Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù)

    這篇文章主要介紹了golang 實(shí)現(xiàn)每隔幾分鐘執(zhí)行一個(gè)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go install/build生成的文件命名和路徑操作

    go install/build生成的文件命名和路徑操作

    這篇文章主要介紹了go install/build生成的文件命名和路徑操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang中context使用小結(jié)

    golang中context使用小結(jié)

    本文主要介紹了golang中context使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Go導(dǎo)入不同目錄下包報(bào)錯(cuò)的解決方法

    Go導(dǎo)入不同目錄下包報(bào)錯(cuò)的解決方法

    包(package)是多個(gè)Go源碼的集合,是一種高級(jí)的代碼復(fù)用方案,下面這篇文章主要給大家介紹了關(guān)于Go導(dǎo)入不同目錄下包報(bào)錯(cuò)的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評(píng)論