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

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ぷ髦校玫母嗟氖莏moiron/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() // 注意這行代碼要寫(xiě)在上面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() :專門(mén)查詢一行數(shù)據(jù)語(yǔ)法,返回ErrNoRow或者一行數(shù)據(jù),不需要自己關(guān)閉結(jié)果集。

db.Exec() :用于執(zhí)行insertupdate、delete等不需要返回結(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 sdk 查詢對(duì)象存儲(chǔ)中最新文件

    如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件

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

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

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

    golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法

    這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報(bào)錯(cuò)的真正解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    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框架之間的通信問(wèn)題及解決方法

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

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

    教你一招完美解決vscode安裝go插件失敗問(wèn)題

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

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

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

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

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

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

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

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

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

最新評(píng)論