写点什么

Go-MySQL-Driver,让 Go 语言拥抱 MySQL

作者:Barry Yan
  • 2022-11-11
    北京
  • 本文字数:1799 字

    阅读完需:约 6 分钟

Go-MySQL-Driver,让Go语言拥抱MySQL

开源地址:https://github.com/go-sql-driver/mysql

1 简介


正如官方所说,Go-MySQL-Driver 是一个 Go 的 sql 或数据库操作包。

2 优势

  • 纯粹的 Go 语言实现,轻量级和快速

  • z 支持 TCP/IPv4, TCP/IPv6, Unix 域套接字或自定义协议

  • 自动处理断开的连接,自动连接池(通过数据库/sql 包)

  • 支持大于 16MB 的查询

  • 完整的 sql 体系,智能长数据处理

3 上手操作

3.1 建表

CREATE TABLE `student` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  `age` int(2) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
复制代码

3.2 新建 Go Modoules 并下载 Go-MySQL-Driver 依赖

在项目根目录下执行:


go get -u github.com/go-sql-driver/mysql
复制代码

3.3 代码

package main
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time")
var my_db *sql.DB //数据库var my_tb = "student" //表名
/**实体类*/type Student struct { Id int Name string Age int}
/**数据库连接初始化*/func init() { var err error my_db, err = sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test") my_db.SetConnMaxLifetime(100 * time.Second) // 超时时间 my_db.SetMaxOpenConns(0) // 设置最大打开的连接数,默认值为0表示不限制。 my_db.SetMaxIdleConns(16) // 设置闲置的连接数 if err != nil { fmt.Println("连接失败") } fmt.Println("连接成功") // 检查是否连接成功数据库}
/**查看全部*/func FindAllStudent() []Student { var students []Student var stu Student rows, err := my_db.Query("SELECT * FROM " + my_tb) if err != nil { return nil } for rows.Next() { err := rows.Scan(&stu.Id, &stu.Name, &stu.Age) if err != nil { return nil } students = append(students, stu) } return students}
/**添加一个*/func SaveAdminPwd(stu Student) bool { tx, err := my_db.Begin() if err != nil { return false } stmt, err := tx.Prepare("INSERT INTO " + my_tb + "(id,name,age) VALUES (?,?,?)") if err != nil { return false } result, err := stmt.Exec(stu.Id, stu.Name, stu.Age) tx.Commit() if err != nil { return false } println(result) return true}
/**删除一个根据id*/func DeleteStudentById(id int) bool { tx, err := my_db.Begin() if err != nil { return false } stmt, err := tx.Prepare("DELETE FROM " + my_tb + " WHERE id=?") if err != nil { return false } result, err := stmt.Exec(id) if err != nil { return false } tx.Commit() //别忘 println(result) return true}
/**查看一个是否存在*/func GetStudentById(id int) Student { var stu Student stmt, err := my_db.Prepare("SELECT * FROM " + my_tb + " WHERE id=?") rows, err := stmt.Query(id) if err != nil { return Student{} } if rows.Next() { err := rows.Scan(&stu.Id, &stu.Name,&stu.Age) if err != nil { return Student{} } } return stu}
/**修改一个*/func UpdateStudentById(stu Student) bool { prepare, err := my_db.Prepare("UPDATE " + my_tb + " SET name=?,age=? WHERE id=?") if err != nil { return false } exec, err := prepare.Exec(stu.Name, stu.Age, stu.Id) if err != nil { return false } print(exec) return true}
/**使用main函数测试*/func main() { stu := Student{3, "ww", 32} SaveAdminPwd(stu) //DeleteStudentById(2) studentById := GetStudentById(3) fmt.Println(studentById) UpdateStudentById(Student{3,"zsss",21}) s := GetStudentById(3) fmt.Println(s) students := FindAllStudent() for _, stu := range students { fmt.Println(stu) }}
复制代码


~

发布于: 刚刚阅读数: 3
用户头像

Barry Yan

关注

做兴趣使然的Hero 2021-01-14 加入

Just do it.

评论

发布
暂无评论
Go-MySQL-Driver,让Go语言拥抱MySQL_Go_Barry Yan_InfoQ写作社区