最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言實(shí)現(xiàn)操作MySQL的基礎(chǔ)知識(shí)總結(jié)

 更新時(shí)間:2022年09月01日 08:16:24   作者:yi個(gè)俗人  
這篇文章主要總結(jié)一下怎么使用Go語(yǔ)言操作MySql數(shù)據(jù)庫(kù),文中的示例代碼講解詳細(xì),需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有所幫助

前言

MySQL 是目前開(kāi)發(fā)中最常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù),也是程序員打交道最多的數(shù)據(jù)庫(kù)。 使用 Go 語(yǔ)言進(jìn)行操控?cái)?shù)據(jù)庫(kù)需要使用 Go 自帶database/sql和驅(qū)動(dòng)go-sql-driver/mysql來(lái)實(shí)現(xiàn)。這篇文章主要總結(jié)一下怎么使用Go語(yǔ)言操作MySql數(shù)據(jù)庫(kù),需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有幫助。

下載依賴

database/sql是Go操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)庫(kù)之一,它提供了一系列接口方法,用于訪問(wèn)數(shù)據(jù)庫(kù)(mysql,sqllite,oralce),但是它并不會(huì)提供數(shù)據(jù)庫(kù)特有的方法,那些特有的方法需要交給數(shù)據(jù)庫(kù)驅(qū)動(dòng)去處理。

我們?cè)谕ǔ9ぷ髦?,用的更多的是jmoiron/sqlx包來(lái)操作數(shù)據(jù)庫(kù),sqlx是基于標(biāo)準(zhǔn)庫(kù)的擴(kuò)展,并且我們可以通過(guò)sqlx操作各種類型的數(shù)據(jù)。

go get -u github.com/go-sql-driver/mysql
go get -u github.com/jmoiron/sqlx

使用 MySQL 驅(qū)動(dòng)

Open 打開(kāi)一個(gè) dirverName 指定的數(shù)據(jù)庫(kù),dataSourceName 指定數(shù)據(jù)源,一般至少包括數(shù)據(jù)庫(kù)文件名和其它連接必要的信息。

func Open(driverName, dataSourceName string) (*DB, error)

它返回的是一個(gè)sql.DB數(shù)據(jù)庫(kù)類型,它不是數(shù)據(jù)庫(kù)連接,Go 中的連接來(lái)自內(nèi)部實(shí)現(xiàn)的連接池,連接的建立是惰性的,連接將會(huì)在操作的時(shí)候,由連接池創(chuàng)建并維護(hù),它可以安全地被多個(gè)goroutine同時(shí)使用。

示例:

package main

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


var db *sql.DB //聲明一個(gè)全局的 db 變量

func main() {
	// 初始化 MySQL
	err := initDB()
	if err != nil {
		panic(err)
	}
	defer db.Close() // 注意這行代碼要寫在上面err判斷的下面
}

//initDB 初始化MySQL
func initDB() (err error) {
    // 不會(huì)校驗(yàn)賬號(hào)密碼是否正確
	db, err = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test")
	if err != nil {
		return err
	}
    // 嘗試與數(shù)據(jù)庫(kù)建立連接(校驗(yàn)dsn是否正確)
	err = db.Ping()
	if err != nil {
		return err
	}
	return nil
}

注意:

  • sql.Open只會(huì)驗(yàn)證格式是否正確,不會(huì)連接數(shù)據(jù)庫(kù)。
  • db.Ping會(huì)連接數(shù)據(jù)庫(kù),判斷用戶,密碼,ip地址,端口是否正確。
  • db.Closeerr之后,是因?yàn)榭赡艽蜷_(kāi)不成功,關(guān)閉一個(gè)沒(méi)有打開(kāi)的連接。

SetMaxOpenConns

func (db *DB) SetMaxOpenConns(n int)

SetMaxOpenConns設(shè)置與數(shù)據(jù)庫(kù)建立連接的最大數(shù)目。 如果n大于0且小于最大閑置連接數(shù),會(huì)將最大閑置連接數(shù)減小到匹配最大開(kāi)啟連接數(shù)的限制。 如果n<=0,不會(huì)限制最大開(kāi)啟連接數(shù),默認(rèn)為0(無(wú)限制)。

SetMaxIdleConns

func (db *DB) SetMaxIdleConns(n int)

SetMaxIdleConns設(shè)置連接池中的最大閑置連接數(shù)。 如果n大于最大開(kāi)啟連接數(shù),則新的最大閑置連接數(shù)會(huì)減小到匹配最大開(kāi)啟連接數(shù)的限制。 如果n<=0,不會(huì)保留閑置連接。

操作

func (db *DB) Query(query string, args ...interface{}) (*Rows, error)
func (db *DB) QueryRow(query string, args ...interface{}) *Row
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
func (db *DB) Prepare(query string) (*Stmt, error)

db.Query(): 返回多行數(shù)據(jù),需要依次遍歷,并且需要自己關(guān)閉查詢結(jié)果集。

db.QueryRow() :專門查詢一行數(shù)據(jù)語(yǔ)法,返回ErrNoRow或者一行數(shù)據(jù),不需要自己關(guān)閉結(jié)果集。

db.Exec() :用于執(zhí)行insert、updatedelete等不需要返回結(jié)果集的操作。

db.Prepare() :預(yù)先將一個(gè)數(shù)據(jù)庫(kù)連接(con)和一個(gè)條sql語(yǔ)句綁定并返回stmt結(jié)構(gòu)體代表這個(gè)綁定后的連接,然后運(yùn)行stmt.Query()或者stmt.QueryRow();stmt是并發(fā)安全的。之所以這樣設(shè)計(jì),是因?yàn)槊看沃苯诱{(diào)用db.Prepare都會(huì)自動(dòng)選擇一個(gè)可用的con,每次選擇的可能不是同一個(gè)con。

到此這篇關(guān)于Go語(yǔ)言實(shí)現(xiàn)操作MySQL的基礎(chǔ)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Go語(yǔ)言操作MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go應(yīng)用中優(yōu)雅處理Error的技巧總結(jié)

    Go應(yīng)用中優(yōu)雅處理Error的技巧總結(jié)

    在程序員中,尤其是go新手,經(jīng)常聽(tīng)到的一個(gè)討論話題是:如何處理錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Go應(yīng)用中優(yōu)雅處理Error的一些相關(guān)技巧,需要的朋友可以參考下
    2021-09-09
  • 基于Go語(yǔ)言實(shí)現(xiàn)高性能文件上傳下載系統(tǒng)

    基于Go語(yǔ)言實(shí)現(xiàn)高性能文件上傳下載系統(tǒng)

    在Web應(yīng)用開(kāi)發(fā)中,文件上傳下載是一個(gè)非常常見(jiàn)的需求,本文將介紹如何使用Go語(yǔ)言實(shí)現(xiàn)一個(gè)安全、高效的本地文件存儲(chǔ)系統(tǒng),感興趣的小伙伴可以了解下
    2025-03-03
  • go語(yǔ)言結(jié)構(gòu)體指針操作示例詳解

    go語(yǔ)言結(jié)構(gòu)體指針操作示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言結(jié)構(gòu)體指針操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語(yǔ)言測(cè)試庫(kù)testify使用學(xué)習(xí)

    Go語(yǔ)言測(cè)試庫(kù)testify使用學(xué)習(xí)

    這篇文章主要為大家介紹了Go語(yǔ)言測(cè)試庫(kù)testify的使用學(xué)習(xí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解Go語(yǔ)言中Goroutine退出機(jī)制的原理及使用

    詳解Go語(yǔ)言中Goroutine退出機(jī)制的原理及使用

    goroutine是Go語(yǔ)言提供的語(yǔ)言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過(guò)?go?關(guān)鍵字來(lái)開(kāi)啟?goroutine?即可。本文就來(lái)詳細(xì)講講Goroutine退出機(jī)制的原理及使用,感興趣的可以了解一下
    2022-07-07
  • golang的time包:秒、毫秒、納秒時(shí)間戳輸出方式

    golang的time包:秒、毫秒、納秒時(shí)間戳輸出方式

    這篇文章主要介紹了golang的time包:秒、毫秒、納秒時(shí)間戳輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang?channel為什么不會(huì)阻塞的原因詳解

    Golang?channel為什么不會(huì)阻塞的原因詳解

    這篇文章主要為大家介紹了Golang?channel為什么不會(huì)阻塞的原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 淺析Golang中閉包的創(chuàng)建與使用

    淺析Golang中閉包的創(chuàng)建與使用

    閉包是包括?Go?在內(nèi)的編程語(yǔ)言的一項(xiàng)強(qiáng)大功能,通過(guò)閉包,您可以在函數(shù)中封裝數(shù)據(jù),并通過(guò)函數(shù)的返回值訪問(wèn)這些數(shù)據(jù),本文將介紹Go?中閉包的基礎(chǔ)知識(shí),希望對(duì)大家有所幫助
    2023-11-11
  • Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié)

    Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié),本文講解了Slice的定義、Slice的長(zhǎng)度和容量、Slice是引用類型、Slice引用傳遞發(fā)生“意外”等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • windows下使用vscode搭建golang環(huán)境并調(diào)試的過(guò)程

    windows下使用vscode搭建golang環(huán)境并調(diào)試的過(guò)程

    這篇文章主要介紹了在windows下使用vscode搭建golang環(huán)境并進(jìn)行調(diào)試,主要包括安裝方法及環(huán)境變量配置技巧,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

阳江市| 中江县| 巴林右旗| 东光县| 甘南县| 嘉兴市| 林口县| 铁岭市| 固阳县| 隆昌县| 连平县| 鄂托克前旗| 历史| 武义县| 榕江县| 临漳县| 象山县| 广德县| 内黄县| 莆田市| 定陶县| 油尖旺区| 漳州市| 洛川县| 瓮安县| 剑川县| 内江市| 仁化县| 扬州市| 黑龙江省| 正安县| 共和县| 缙云县| 三亚市| 乐亭县| 永寿县| 东宁县| 宁夏| 临桂县| 梁河县| 台山市|