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

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

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

前言

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

下載依賴

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

我們在通常工作中,用的更多的是jmoiron/sqlx包來操作數(shù)據(jù)庫,sqlx是基于標準庫的擴展,并且我們可以通過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)建并維護,它可以安全地被多個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ù),默認為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() :預先將一個數(shù)據(jù)庫連接(con)和一個條sql語句綁定并返回stmt結(jié)構(gòu)體代表這個綁定后的連接,然后運行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應用中優(yōu)雅處理Error的技巧總結(jié)

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

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

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

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

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

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

    Go語言測試庫testify使用學習

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

    詳解Go語言中Goroutine退出機制的原理及使用

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

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

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

    Golang?channel為什么不會阻塞的原因詳解

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

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

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

    Go語言中的Slice學習總結(jié)

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

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

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

最新評論