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

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

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

前言

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

下載依賴

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

我們在通常工作中,用的更多的是jmoiron/sqlx包來操作數(shù)據(jù)庫,sqlx是基于標(biāo)準(zhǔn)庫的擴(kuò)展,并且我們可以通過sqlx操作各種類型的數(shù)據(jù)。

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

使用 MySQL 驅(qū)動

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

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

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

示例:

package main

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


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

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

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

注意:

  • sql.Open只會驗證格式是否正確,不會連接數(shù)據(jù)庫。
  • db.Ping會連接數(shù)據(jù)庫,判斷用戶,密碼,ip地址,端口是否正確。
  • db.Closeerr之后,是因為可能打開不成功,關(guān)閉一個沒有打開的連接。

SetMaxOpenConns

func (db *DB) SetMaxOpenConns(n int)

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

SetMaxIdleConns

func (db *DB) SetMaxIdleConns(n int)

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

操作

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ù)語法,返回ErrNoRow或者一行數(shù)據(jù),不需要自己關(guān)閉結(jié)果集。

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

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

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

相關(guān)文章

  • 如何使用騰訊云go sdk 查詢對象存儲中最新文件

    如何使用騰訊云go sdk 查詢對象存儲中最新文件

    這篇文章主要介紹了使用騰訊云go sdk 查詢對象存儲中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁檢索對象列表,并如何對結(jié)果排序以找到最后更新的對象,我們還展示了如何優(yōu)化用戶體驗,通過實時進(jìn)度更新和檢索多個文件來改進(jìn)程序,需要的朋友可以參考下
    2024-03-03
  • Golang中的深拷貝與淺拷貝使用

    Golang中的深拷貝與淺拷貝使用

    本文主要介紹了Golang中的深拷貝與淺拷貝使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang中package?is?not?in?GOROOT報錯的真正解決辦法

    golang中package?is?not?in?GOROOT報錯的真正解決辦法

    這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報錯的真正解決辦法,文中通過圖文介紹的非常詳細(xì),對同樣遇到這個問題的朋友具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • 詳解Go?依賴管理?go?mod?tidy

    詳解Go?依賴管理?go?mod?tidy

    這篇文章主要為大家介紹了詳解Go?依賴管理?go?mod?tidy,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 關(guān)于go-micro與其它gRPC框架之間的通信問題及解決方法

    關(guān)于go-micro與其它gRPC框架之間的通信問題及解決方法

    在之前的文章中分別介紹了使用gRPC官方插件和go-micro插件開發(fā)gRPC應(yīng)用程序的方式,都能正常走通。不過當(dāng)兩者混合使用的時候,互相訪問就成了問題,下面通過本文給大家講解下go-micro與gRPC框架通信問題,一起看看吧
    2022-04-04
  • 教你一招完美解決vscode安裝go插件失敗問題

    教你一招完美解決vscode安裝go插件失敗問題

    VSCode是我們開發(fā)go程序的常用工具,但是安裝VSCode成功后,創(chuàng)建一個.go文件居然提示錯誤了,所以下面下面這篇文章主要給大家介紹了如何通過一招完美解決vscode安裝go插件失敗問題的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Golang分布式注冊中心實現(xiàn)流程講解

    Golang分布式注冊中心實現(xiàn)流程講解

    這篇文章主要介紹了Golang分布式注冊中心實現(xiàn)流程,注冊中心可以用于服務(wù)發(fā)現(xiàn),服務(wù)注冊,配置管理等方面,在分布式系統(tǒng)中,服務(wù)的發(fā)現(xiàn)和注冊是非常重要的組成部分,需要的朋友可以參考下
    2023-05-05
  • Go設(shè)計模式之單例模式圖文詳解

    Go設(shè)計模式之單例模式圖文詳解

    單例模式是一種創(chuàng)建型設(shè)計模式,讓你能夠保證一個類只有一個實例,并提供一個訪問該實例的全局節(jié)點,本文就通過圖文給大家介紹一下Go的單例模式,需要的朋友可以參考下
    2023-07-07
  • Go語言學(xué)習(xí)之將mp4通過rtmp推送流媒體服務(wù)的實現(xiàn)方法

    Go語言學(xué)習(xí)之將mp4通過rtmp推送流媒體服務(wù)的實現(xiàn)方法

    對音視頻一直是小白,決定沉下心來,好好研究一下音視頻知識,下面這篇文章主要給大家介紹了關(guān)于Go語言學(xué)習(xí)之將mp4通過rtmp推送流媒體服務(wù)的實現(xiàn)方法,需要的朋友可以參考下
    2022-12-12
  • 一文帶你理解Go語言中方法的本質(zhì)

    一文帶你理解Go語言中方法的本質(zhì)

    我們知道,Go語言從設(shè)計伊始,就不支持經(jīng)典的面向?qū)ο笳Z法元素,但?Go?語言仍保留了名為“方法(method)”的語法元素,下面我們就來帶大家深入了解一下Go語言中的方法吧
    2023-11-11

最新評論