Go語言是一種非常流行的編程語言,它的并發(fā)性能和效率非常優(yōu)秀,自帶的標準庫也非常豐富。在Web開發(fā)中,連接數(shù)據(jù)庫是必不可少的一項工作。MySQL是目前最常用的關(guān)系型數(shù)據(jù)庫之一,本文將介紹如何使用Go語言連接MySQL數(shù)據(jù)庫。
首先,我們需要使用Go語言的數(shù)據(jù)庫驅(qū)動來連接MySQL數(shù)據(jù)庫。Go語言官方提供了兩種連接MySQL數(shù)據(jù)庫的驅(qū)動:MySQL驅(qū)動和SQLite驅(qū)動。本文將使用MySQL驅(qū)動,下面是連接MySQL的代碼:
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { //連接數(shù)據(jù)庫 db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test") if err != nil { fmt.Println(err) return } defer db.Close() }
上面的代碼中,首先導(dǎo)入了database/sql、fmt和github.com/go-sql-driver/mysql三個包。其中,database/sql是Go標準庫中內(nèi)置的包,提供了對SQL數(shù)據(jù)庫的支持;fmt則提供了格式化輸出等功能。最后一個包則是我們用來連接MySQL數(shù)據(jù)庫的驅(qū)動,必須先通過go get命令安裝。安裝方式如下:
go get github.com/go-sql-driver/mysql
其中,root是MySQL數(shù)據(jù)庫的用戶名,password是密碼,tcp(127.0.0.1:3306)表示使用TCP協(xié)議連接到本機的3306端口,test是要連接的數(shù)據(jù)庫名稱。連接成功后,我們就可以對MySQL數(shù)據(jù)庫執(zhí)行操作了。
接下來,我們可以使用Go語言編寫SQL語句,對MySQL數(shù)據(jù)庫進行增刪改查等操作。下面是一個簡單的例子:
//插入數(shù)據(jù) _, err = db.Exec("INSERT INTO user(name,age) values(?,?)","Tom",18) if err != nil { fmt.Println(err) return } //查詢數(shù)據(jù) rows, err := db.Query("SELECT * FROM user") if err != nil { fmt.Println(err) return } defer rows.Close() for rows.Next() { var name string var age int err = rows.Scan(&name, &age) if err != nil { fmt.Println(err) return } fmt.Println(name, age) } //更新數(shù)據(jù) _, err = db.Exec("UPDATE user SET age=? WHERE name=?", 20, "Tom") if err != nil { fmt.Println(err) return } //刪除數(shù)據(jù) _, err = db.Exec("DELETE FROM user WHERE name=?", "Tom") if err != nil { fmt.Println(err) return }
上面的代碼展示了Go語言對MySQL數(shù)據(jù)庫的增刪改查操作。其中,db.Exec用來執(zhí)行SQL語句,如果執(zhí)行成功,返回值為nil;db.Query用來執(zhí)行查詢語句,返回一個Rows類型的結(jié)果集,需要調(diào)用rows.Next()和rows.Scan()方法對結(jié)果進行解析。最后別忘了關(guān)閉結(jié)果集。
到此為止,我們已經(jīng)學會了使用Go語言連接MySQL數(shù)據(jù)庫。需要注意的是,如果使用連接池提高數(shù)據(jù)庫連接的效率,會更加實用高效。