Directorio de artículos
1. Creación de tablas MySQL
Crear tabla de usuarios
CREATE TABLE `user` (
`user_id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL,
`user_code` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_user_code_IDX` (`user_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Dos, descarga del controlador mysql
1. Crear un nuevo directorio de proyectos wms
2. Abra la ventana de comando cmd e ingrese al directorio wms
3. Inicialice el proyecto
go mod init fa.com/wms
comando de inicialización go mod init, fa.com/wms es la ruta del módulo
4. Descargue el controlador go
go get github.com/go-sql-driver/mysql@latest
Ejecute el comando go get para descargar la última versión del controlador go mysql
Tres, configuración de parámetros de conexión mysql
Cree un nuevo mysqlutil.go para establecer una conexión mysql
package db
import (
"database/sql"
"fmt"
"time"
//注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
_ "github.com/go-sql-driver/mysql"
)
// 创建数据库连接
func ConnMySQL() *sql.DB {
// 数据源名
driverName := "mysql"
// 用户名root
// 密码1234
// tcp协议连接
// 数据库地址
// 数据库 wms
dataSourceName := "root" + ":" + "1234" + "@" + "tcp" + "(" + "127.0.0.1:3306" + ")" + "/" + "wms"
db, err := sql.Open(driverName, dataSourceName)
if err != nil {
panic(err)
}
// 数据库设置
db.SetConnMaxLifetime(time.Minute * 10)
db.SetConnMaxIdleTime(time.Minute * 10)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
// 连接测试
err = db.Ping()
if err != nil {
fmt.Println("数据库连接失败")
panic(err)
}
return db
}
Cuatro, mysql nuevos datos
Crear un nuevo usuario.ir
// 包名
package user
import (
"log"
// 引入mysql数据库连接包
"fa.com/wms/db"
)
// 定义user类型结构体
type User struct {
UserId int
UserName string
UserCode string
Password string
}
// 向数据库新增一个User数据
func AddUser(u *User) {
// 调用db包ConnMySQL()
db := db.ConnMySQL()
// 预编译保存sql创建 statement
stmt, err := db.Prepare("INSERT INTO `user` (user_name, user_code, password) VALUES (?, ?, ?)")
// err 不等空则statement创建失败
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
// 在函数运行结束时关闭statement
defer stmt.Close()
// 执行保存sql
// _下划线 表示忽略函数返回的sql.Result值
_, err = stmt.Exec(u.UserName, u.UserCode, u.Password)
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
}
Cinco, eliminar datos mysql
func DeleteById(userId int) {
db := db.ConnMySQL()
// 预编译删除sql创建 statement
stmt, err := db.Prepare("delete from `user` where user_id = ?")
// err 不等空则statement创建失败
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
// 在函数运行结束时关闭statement
defer stmt.Close()
// 执行删除sql
// _下划线 表示忽略函数返回的sql.Result值
_, err = stmt.Exec(userId)
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
}
Seis, mysql modificar datos
func UpdateUser(u *User) {
db := db.ConnMySQL()
// 预编译更新sql创建 statement
stmt, err := db.Prepare("UPDATE `user` SET user_name=?, user_code=?, password=? WHERE user_id=?")
// err 不等空则statement创建失败
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
// 在函数运行结束时关闭statement
defer stmt.Close()
// 执行更新sql
// _下划线 表示忽略函数返回的sql.Result值
_, err = stmt.Exec(u.UserName, u.UserCode, u.Password, u.UserId)
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
}
Siete, datos de consulta mysql
func QueryUserByCode(code string) []User {
// 调用db包ConnMySQL()
db := db.ConnMySQL()
// 预编译查询sql创建 statement
stmt, err := db.Prepare("SELECT user_id, user_name, user_code, password FROM `user` WHERE user_code= ?")
if err != nil {
log.Fatal(err)
panic(err)
}
defer stmt.Close()
// 执行查询sql,返回查询结果rows
rows, err := stmt.Query(code)
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
}
// 定义User切片
s := make([]User, 0)
// 遍历rows
for rows.Next() {
u := User{
}
// 扫描rows的每一列并保存数据到User对应字段
err := rows.Scan(&u.UserId, &u.UserName, &u.UserCode, &u.Password)
if err != nil {
// 打印错误信息
log.Fatal(err)
// 抛出错误信息,阻止程序继续运行
panic(err)
},
// 扫描后的user加入到切片
s = append(s, u)
}
return s
}
El código anterior está escrito usando vscode, y la estructura de directorios se muestra en la siguiente figura: