当前位置:网站首页>gin中改进版curd接口例子
gin中改进版curd接口例子
2022-08-09 08:46:00 【tjg888888】
package main import ( "database/sql" "fmt" "strconv" "github.com/gin-gonic/gin" "net/http" _ "github.com/jinzhu/gorm/dialects/sqlite" _"github.com/go-sql-driver/mysql" "log" ) var db *sql.DB var err error //数据表user,字段分别为id,name,gender,age type User struct { ID int `json:"id"` Name string `json:"name"` Gender int `json:"gender"` Age int `json:"age"` } func main() { //初始化数据库连接池,连接信息(数据库类型mysql,数据库用户名root,数据库密码为空,数据库ip:127.0.0.1,端口3306,数据库名imooc) db,err=sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/imooc?parseTime=true") if err != nil{ log.Fatalln(err) } //定义数据库操作 defer db.Close() //设置数据库空闲连接 db.SetMaxIdleConns(20) //设置数据库最大打开连接 db.SetMaxOpenConns(20) if err := db.Ping(); err != nil{ log.Fatalln(err) } //设置路由 router := gin.Default() //增加一条记录 router.POST("/add", func(c *gin.Context) { //接值 name:=c.Request.FormValue("name") cgender:=c.Request.FormValue("gender") gender,_:=strconv.Atoi(cgender) cage:=c.Request.FormValue("age") age,_:=strconv.Atoi(cage) user:=User{ Name:name, Gender: gender, Age: age, } id:=user.Create() msg:=fmt.Sprintf("insert successful %d",id) //最后返回json格式数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //查询列表 router.GET("/list", func(c *gin.Context) { rs,_:=getRows() c.JSON(http.StatusOK,gin.H{ "list":rs, }) }) //查询单条记录 router.GET("/find", func(c *gin.Context) { //接值 ids:=c.Request.FormValue("id") id,_:=strconv.Atoi(ids) rs,_:=getRow(id) c.JSON(http.StatusOK,gin.H{ "result":rs, }) }) //修改单条记录 router.PUT("/update", func(c *gin.Context) { //接值 cid:=c.Request.FormValue("id") id,_:=strconv.Atoi(cid)//将字符串类型转换成int操作,int转字符串: Itoa() name:=c.Request.FormValue("name") cgender:=c.Request.FormValue("gender") gender,_:=strconv.Atoi(cgender) cage:=c.Request.FormValue("age") age,_:=strconv.Atoi(cage) //创建user对象 user:=User{ID: id,Name:name,Gender:gender,Age:age} row:=user.Update() //返回的msg内容 msg:=fmt.Sprintf("update user successful %d",row) //返回json数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //删除某条记录 router.DELETE("delete", func(c *gin.Context) { //接值 cid:=c.Request.FormValue("id") //利用strconv函数的Atoi()方法将字符串类型cid转换为int整型 id,_:=strconv.Atoi(cid) row := Delete(id) //返回提示信息msg msg:=fmt.Sprint("delete successful %d",row) //返回json数据 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //本地监听8080端口运行该程序 router.Run("0.0.0.0:8080") } //增加 func (user *User) Create() interface{} { rs,err:=db.Exec("insert into user (name,gender,age)value (?,?,?)",user.Name,user.Gender,user.Age) if err!=nil{ log.Fatalln(err) } id,err:=rs.LastInsertId() if err!=nil{ log.Fatalln(err) } return id } //查询列表 func getRows() (users []User,err error) { rows,err:=db.Query("select * from user") for rows.Next() { user:=User{} err :=rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age) if err!=nil{ log.Fatalln(err) } users=append(users,user) } rows.Close() return } //查询单条 func getRow(id int) (user User,err error) { user =User{} err=db.QueryRow("select * from user where id=?",id).Scan(&user.ID,&user.Name,&user.Gender,&user.Age) return } //修改 func (user *User)Update()int64 { rs,err:=db.Exec("update user set name=?,gender=?,age=? where id=?",user.Name,user.Gender,user.Age,user.ID) if err!=nil{ log.Fatalln(err) } rows,err:=rs.RowsAffected() if err!=nil{ log.Fatalln(err) } return rows } //删除 func Delete(id int) interface{} { rs,err:=db.Exec("delete from user where id=?",id) if err!=nil{ log.Fatal() } rows,err:=rs.RowsAffected() if err!=nil{ log.Fatal() } return rows }
边栏推荐
- QT设置exe可执行文件的图标
- 【CNN】白话迁移学习中域适应
- leetcode 37. 解数独 (困难)
- The difference between big-endian and little-endian storage is easy to understand at a glance
- 继承中的运算符重载:输入输出的传奇
- 探索APP性能优化之稳定性优化(解决方案)
- leetcode 34. 在排序数组中查找元素的第一个和最后一个位置(二分经典题)
- GBJ610-ASEMI超薄整流扁桥GBJ610
- Matlab, and nonlinear equations solving linear equations
- BUUCTF MISC刷题笔记(二)
猜你喜欢
随机推荐
requests之模拟登录学习
The embedded serial port interrupt can only receive one byte
leetcode 32. 最长有效括号 (困难)
VNCTF2021 部分题目复现
交换机的工作原理
账号和权限管理
The MySQL database
Makefile中patsubst、wildcard、notdir的使用
GBJ610-ASEMI超薄整流扁桥GBJ610
零搜索量的关键词,你需要布局吗?
【CNN】2022 ECCV Oral 自反馈学习的mixup训练框架AutoMix
OpenHarmony开源见面会(南京站)相关笔记
SAE定时备份博客数据库
加密技术和电子竞技如何促进彼此的发展
How does STM32 know the usage of FLASH
Shell编程之循环语句与函数
nyoj306 走迷宫(搜索+二分)
编程洗衣机:字符串输出后的乱码
Shell programming loop statement and function
Static routing principle and configuration