Golang连接MySQL数据库的实现方法
Golang连接MySQL数据库的实现方法 你好,我该如何将我的项目与 MySQL 数据库连接起来?
2 回复
首先,你需要一个驱动程序(https://github.com/go-sql-driver/mysql)
然后查看这里的示例 https://github.com/go-sql-driver/mysql/wiki/Examples
更多关于Golang连接MySQL数据库的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中连接MySQL数据库通常使用database/sql包和相应的MySQL驱动。以下是完整的实现方法:
1. 安装MySQL驱动
首先安装Go语言的MySQL驱动:
go get -u github.com/go-sql-driver/mysql
2. 基本连接示例
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 数据库连接字符串格式:用户名:密码@协议(地址:端口)/数据库名?参数
dsn := "username:password@tcp(localhost:3306)/mydatabase?charset=utf8mb4&parseTime=True&loc=Local"
// 打开数据库连接
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal("数据库连接失败:", err)
}
defer db.Close()
// 验证连接是否有效
err = db.Ping()
if err != nil {
log.Fatal("数据库连接验证失败:", err)
}
fmt.Println("成功连接到MySQL数据库")
}
3. 完整的使用示例
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int
Name string
Age int
}
func main() {
// 连接数据库
dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 创建表
createTableSQL := `
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT
)`
_, err = db.Exec(createTableSQL)
if err != nil {
log.Fatal("创建表失败:", err)
}
// 插入数据
insertSQL := "INSERT INTO users (name, age) VALUES (?, ?)"
result, err := db.Exec(insertSQL, "张三", 25)
if err != nil {
log.Fatal("插入数据失败:", err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,ID: %d\n", id)
// 查询数据
querySQL := "SELECT id, name, age FROM users WHERE id = ?"
var user User
err = db.QueryRow(querySQL, id).Scan(&user.ID, &user.Name, &user.Age)
if err != nil {
log.Fatal("查询失败:", err)
}
fmt.Printf("查询结果: ID=%d, Name=%s, Age=%d\n", user.ID, user.Name, user.Age)
// 查询多条数据
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal("查询失败:", err)
}
defer rows.Close()
var users []User
for rows.Next() {
var u User
err = rows.Scan(&u.ID, &u.Name, &u.Age)
if err != nil {
log.Fatal("扫描数据失败:", err)
}
users = append(users, u)
}
fmt.Println("所有用户:")
for _, u := range users {
fmt.Printf("ID: %d, Name: %s, Age: %d\n", u.ID, u.Name, u.Age)
}
}
4. 连接池配置
func setupDB() *sql.DB {
dsn := "username:password@tcp(localhost:3306)/mydatabase?charset=utf8mb4"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
// 配置连接池
db.SetMaxOpenConns(25) // 最大打开连接数
db.SetMaxIdleConns(10) // 最大空闲连接数
db.SetConnMaxLifetime(5 * time.Minute) // 连接最大生存时间
return db
}
5. 事务处理示例
func transferMoney(db *sql.DB, fromID, toID int, amount float64) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer func() {
if err != nil {
tx.Rollback()
}
}()
// 扣款
_, err = tx.Exec("UPDATE accounts SET balance = balance - ? WHERE id = ?", amount, fromID)
if err != nil {
return err
}
// 收款
_, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE id = ?", amount, toID)
if err != nil {
return err
}
return tx.Commit()
}
这些示例展示了Go语言连接MySQL数据库的基本方法和常见操作,包括连接建立、CRUD操作、连接池配置和事务处理。

