使用Go 语言连接并操作 MySQL 数据库
新建项目,我这里使用的vscode:
1.新建项目初始化:
手动创建工程文件夹go安装目录->src->projectName
在项目下创建 main.go文件:
在vscode中点击文件->打开文件夹,选择刚刚新建的文件夹。打开后,如下图新建一个文件后缀为.go(main.go)。
打开终端,如下图,输入go mod init go_test(格式:go mod init 新建的文件名称),回车等待。点击运行按钮或ctrl+alt+n运行项目。
2.安装MySQL驱动
要使用Go语言连接MySQL,首先需要安装一个兼容的数据库驱动。go-sql-driver/mysql 是一个广泛使用的开源驱动,可以通过 go get 命令来安装:
go get -u github.com/go-sql-driver/mysql
3.导入驱动包
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
4. 连接数据库
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// DSN (Data Source Name) 是包含数据库连接信息的字符串
dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
// 创建数据库连接
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err.Error())
}
defer db.Close()
// 检查连接是否有效
err = db.Ping()
if err != nil {
panic(err.Error())
} else {
fmt.Println("Connected to the database!")
}
}
参数说明:
user: 数据库用户名
password: 密码
tcp(localhost:3306): 服务器地址和端口(这里是本地主机上的默认MySQL端口)
/dbname: 要连接的数据库名称
charset=utf8mb4: 设置字符集
parseTime=True: 让驱动解析时间类型字段为time.Time类型
loc=Local: 设置时区为本地时区
测试一下:
写一个查询试试:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// DSN (Data Source Name) 是包含数据库连接信息的字符串
dsn := "root:123456@tcp(1.1.1.1:3306)/ry-vue?charset=utf8mb4&parseTime=True&loc=Local"
// 创建数据库连接
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err.Error())
}
defer db.Close()
// 检查连接是否有效
err = db.Ping()
if err != nil {
panic(err.Error())
} else {
fmt.Println("Connected to the database!")
}
// 查询单个用户
userId := 2
getUser(db, userId)
}
// 查询单个用户
func getUser(db *sql.DB, user_id int) {
query := "SELECT user_id ,user_name,nick_name FROM sys_user WHERE user_id = ?"
row := db.QueryRow(query, user_id)
var user_name string
var nick_name string
// 调用完了 QueryRow 方法之后,一定要记得调用 Scan 方法,否则持有的数据库连接不会被释放
if err := row.Scan(&user_id, &user_name, &nick_name); err != nil {
if err == sql.ErrNoRows {
fmt.Printf("用户 ID %d 不存在\n", user_id)
} else {
log.Fatal(err)
}
} else {
fmt.Printf("用户 ID: %d, userName: %s, nickName: %s\n", user_id, user_name, nick_name)
}
}