当前位置: 首页 > article >正文

使用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)
	}

}

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/411900.html

相关文章:

  • python爬虫安装教程
  • JAVA---IO
  • 常见线程安全问题之复合操作
  • Linux 系统管理
  • vue实现列表滑动下拉加载数据
  • Spring Boot 应用开发:构建高效、可扩展的 Java 微服务
  • python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
  • Jackson、Gson、FastJSON三款JSON利器比拼
  • 用web前端写出一个高校官网
  • iOS 19 重大更新泄露,将带来更“聪明”的 Siri 挑战 ChatGPT
  • sqlite3自动删除数据的两种设置方式记录
  • 【单点知识】基于PyTorch进行模型部署
  • Java基础夯实——2.7 线程上下文切换
  • IDEA实现Oracle连接以及基本的增删改查操作步骤详解
  • 网易游戏用户流失预测实践
  • 【公益接口】不定时新增接口,仅供学习
  • 高校宿舍节能用电现状及智慧监管平台构建
  • javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET
  • 鸢尾花Iris训练数据和测试数据的分割和训练数据的散点图矩阵绘制
  • Linux中的“块”是什么
  • torch张量与函数表达式写法
  • 技术周刊 | 前端真的凉了吗?2024 前端趋势解读
  • 外包干了3年,技术退步明显...
  • 大数据新视界 -- Hive 查询性能优化:基于成本模型的奥秘(上)(5/ 30)
  • HTTP代理是什么,主要用来干嘛?
  • 在xml的sql的子查询中使用row_number over之后再在mapper的接口层传入Page对象实现分页功能,出现Bug