天天看點

Golang如何優雅連接配接MYSQL資料庫?(上)

Go原生就支援連接配接資料庫,是以在使用 Golang 開發時,當需要資料庫互動時,即可使用database/sql包。

Golang如何優雅連接配接MYSQL資料庫?(上)

在Go中通路DB需用sql.DB接口:可建立語句(statement)和事務(transaction),執行查詢,擷取結果。

使用DB時,除database/sql包,還需引入想使用的特定DB驅動。官方不提供實作,需要先下載下傳三方實作,點選這裡檢視各種各樣的實作版本。

通常DB選型MySQL,是以選型驅動為:github.com/go-sql-driver/mysql,需引入包:

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

包名前的"_"

import 下劃線(如:import _ github/demo)的作用:當導入一個包時,該包下的檔案裡所有init()函數都會被執行,然而,有些時候我們并不需要把整個包都導入進來,僅僅是是希望它執行init()函數而已。這個時候就可以使用 import _ 引用該包。

上面的MySQL驅動中引入的就是MySQL包中各個init()方法,你無法通過包名來調用包中的其他函數。導入時,驅動的初始化函數會調用sql.Register将自己注冊在database/sql包的全局變量sql.drivers中,以便以後通過sql.Open通路。

Golang如何優雅連接配接MYSQL資料庫?(上)

案例用資料表

Golang如何優雅連接配接MYSQL資料庫?(上)

初始化資料庫連接配接

Golang如何優雅連接配接MYSQL資料庫?(上)

sql.Open()中的資料庫連接配接串格式為:"使用者名:密碼@tcp(IP:端口)/資料庫?charset=utf8"。DB的類型為:*sql.DB,有DB後即可執行CRUD。

Go将資料庫操作分為兩類:Query與Exec

Query表示查詢,它會從資料庫擷取查詢結果(一系列行,可能為空)。

Exec表示執行語句,它不會傳回行。

常見資料庫操作模式:

QueryRow隻傳回一行的查詢,作為Query的一個常見特例。

Prepare準備一個需要多次使用的語句,供後續執行用。

查詢操作

var user User
rows, e := DB.Query("select * from user where id in (1,2,3)")
if e == nil {
    errors.New("query incur error")
}
for rows.Next(){
    e := rows.Scan(user.sex, user.phone, user.name, user.id, 
      user.age)
    if e != nil{
        fmt.Println(json.Marshal(user))
    }
}
rows.Close()
// 單行查詢操作
DB.QueryRow("select * from user where id=1").Scan(user.age, 
  user.id, user.name, user.phone, user.sex)