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

Golang中如何對(duì)MySQL進(jìn)行操作詳解

 更新時(shí)間:2019年03月10日 09:00:22   作者:燈風(fēng)罩戟  
這篇文章主要給大家介紹了關(guān)于在Golang中如何對(duì)MySQL進(jìn)行操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

Golang官方并沒(méi)有提供數(shù)據(jù)庫(kù)驅(qū)動(dòng),但通過(guò)database/sql/driver包來(lái)提供了實(shí)現(xiàn)驅(qū)動(dòng)的標(biāo)準(zhǔn)接口。可以在Github上找到很多開(kāi)源的驅(qū)動(dòng)。

其中g(shù)o-sql-driver/mysql是一個(gè)比較推薦的驅(qū)動(dòng),其完全支持database/sql接口。

使用這個(gè)驅(qū)動(dòng), 在項(xiàng)目里import進(jìn):

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

在正式使用database/sql包之前,首先得明白sql.DB并不代表一個(gè)數(shù)據(jù)庫(kù)連接,它并不會(huì)與數(shù)據(jù)庫(kù)建立任何連接,也不會(huì)驗(yàn)證參數(shù)的合法性,要想知道DSN的合法性,需使用sql.DB實(shí)例(比如db)db.Ping() 方法, 如下:

err = db.Ping()
if err != nil {
 // 錯(cuò)誤處理
}

使用sql.Open()方法即可獲得一個(gè)sql.DB實(shí)例。需要注意的是,sql.DB的設(shè)計(jì)就是用來(lái)作為長(zhǎng)連接使用的,不應(yīng)該在項(xiàng)目里頻繁的進(jìn)行Open()與Close(),提倡的做法是聲明一個(gè)全局的sql.DB實(shí)例, 將其復(fù)用起來(lái)。即只Open()一次,使用直到程序結(jié)束任務(wù)。

拿到sql.DB實(shí)例之后,就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。

在操作數(shù)據(jù)庫(kù)時(shí),推薦做法是使用db.Prepare()對(duì)SQL語(yǔ)句進(jìn)行預(yù)編譯,這樣具有較高的安全性,可在一定程度上避免諸如SQL注入這樣的攻擊手段。

一些示例:

/*
 查詢操作
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `id` = ?")
defer stmt.Close()
if err != nil {
 //錯(cuò)誤處理
}
var userName string
//Scan() 將結(jié)果復(fù)制到userName
err = stmt.QueryRow(1).Scan(&userName)

fmt.Println(userName)

/*
 多行結(jié)果
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `age` = ?")
defer stmt.Close()
if err != nil {
 //錯(cuò)誤處理
}

rows, err := stmt.Query(年齡)
if err != nil {
 //錯(cuò)誤處理
}

for rows.Next() {
 var userName string
 if err := rows.Scan(&userName); err != nil {
  //錯(cuò)誤處理
 }
}
/*
 插入操作
*/
stmt, err := db.Prepare("INSERT INTO `users` (`user_name`, `age`) VALUES(?, ?)")
defer stmt.Close()
if err != nil {
 //錯(cuò)誤處理
}
stmt.Exec("名字",年齡)
/*
 事務(wù)
*/
tx, err := db.Begin()
if err != nil {
 //錯(cuò)誤處理
}
defer tx.Rollback()

stmt, err := db.Prepare("")
defer stmt.Close()
if err != nil {
 //錯(cuò)誤處理
}

stmt.Exec()
err = tx.Commit()
if err != nil {
 //錯(cuò)誤處理
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • golang中defer的基本使用教程

    golang中defer的基本使用教程

    go語(yǔ)言中defer可以完成延遲功能,當(dāng)前函數(shù)執(zhí)行完成后再執(zhí)行defer的代碼塊,下面這篇文章主要給大家介紹了關(guān)于golang中defer基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Go語(yǔ)言錯(cuò)誤處理異常捕獲+異常拋出

    Go語(yǔ)言錯(cuò)誤處理異常捕獲+異常拋出

    這篇文章主要介紹了Go語(yǔ)言錯(cuò)誤處理異常捕獲和異常拋出,Go語(yǔ)言的作者認(rèn)為java等語(yǔ)言的錯(cuò)誤處理底層實(shí)現(xiàn)較為復(fù)雜,就實(shí)現(xiàn)了函數(shù)可以返回錯(cuò)誤類(lèi)型以及簡(jiǎn)單的異常捕獲,雖然簡(jiǎn)單但是也非常精妙,大大的提高了運(yùn)行效率,下文需要的朋友可以參考一下
    2022-02-02
  • 使用Go和Gorm實(shí)現(xiàn)讀取SQLCipher加密數(shù)據(jù)庫(kù)

    使用Go和Gorm實(shí)現(xiàn)讀取SQLCipher加密數(shù)據(jù)庫(kù)

    本文檔主要描述通過(guò)Go和Gorm實(shí)現(xiàn)生成和讀取SQLCipher加密數(shù)據(jù)庫(kù)以及其中踩的一些坑,文章通過(guò)代碼示例講解的非常詳細(xì), 對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • Golang中int類(lèi)型和字符串類(lèi)型相互轉(zhuǎn)換的實(shí)現(xiàn)方法

    Golang中int類(lèi)型和字符串類(lèi)型相互轉(zhuǎn)換的實(shí)現(xiàn)方法

    在日常開(kāi)發(fā)中,經(jīng)常需要將數(shù)字轉(zhuǎn)換為字符串或者將字符串轉(zhuǎn)換為數(shù)字,在 Golang 中,有一些很簡(jiǎn)便的方法可以實(shí)現(xiàn)這個(gè)功能,接下來(lái)就詳細(xì)講解一下如何實(shí)現(xiàn) int 類(lèi)型和字符串類(lèi)型之間的互相轉(zhuǎn)換,需要的朋友可以參考下
    2023-09-09
  • 一文詳解Go語(yǔ)言切片是如何擴(kuò)容的

    一文詳解Go語(yǔ)言切片是如何擴(kuò)容的

    切片是一個(gè)擁有相同類(lèi)型元素的可變長(zhǎng)度的序列,它是基于數(shù)組類(lèi)型做的一層封裝。它非常靈活,支持自動(dòng)擴(kuò)容。所以本文就來(lái)看看Go語(yǔ)言切片是如何擴(kuò)容的吧
    2023-04-04
  • golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms)

    golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms)

    這篇文章主要介紹了golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms),本文給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • golang中range在slice和map遍歷中的注意事項(xiàng)

    golang中range在slice和map遍歷中的注意事項(xiàng)

    今天小編就為大家分享一篇關(guān)于golang中range在slice和map遍歷中的注意事項(xiàng),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Golang泛型的使用方法詳解

    Golang泛型的使用方法詳解

    這篇文章主要介紹了Golang中泛型的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang開(kāi)發(fā)gRPC服務(wù)入門(mén)介紹

    Golang開(kāi)發(fā)gRPC服務(wù)入門(mén)介紹

    這篇文章主要介紹了Golang開(kāi)發(fā)gRPC服務(wù),Golang開(kāi)發(fā)gRPC應(yīng)用程序的套路也已經(jīng)很清晰,這篇文章就來(lái)做一個(gè)簡(jiǎn)單的介紹,算是入門(mén),需要的朋友可以參考下
    2022-04-04
  • 讓GPT教你用go語(yǔ)言和C語(yǔ)言開(kāi)發(fā)IDE配置學(xué)習(xí)

    讓GPT教你用go語(yǔ)言和C語(yǔ)言開(kāi)發(fā)IDE配置學(xué)習(xí)

    這篇文章主要介紹了讓GPT教你用go語(yǔ)言和C語(yǔ)言開(kāi)發(fā)IDE配置學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評(píng)論

城固县| 延寿县| 镇江市| 读书| 无棣县| 太康县| 石屏县| 保定市| 泗洪县| 察雅县| 丰宁| 平果县| 嫩江县| 会理县| 电白县| 田阳县| 通州区| 桑植县| 溧水县| 乐陵市| 华宁县| 瑞安市| 苍山县| 西昌市| 宜春市| 安龙县| 红桥区| 南江县| 承德县| 临西县| 武邑县| 绥滨县| 贡嘎县| 天等县| 上杭县| 松阳县| 佳木斯市| 栖霞市| 赫章县| 霍山县| 会东县|