当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Gin+Gorm小项目

Gin+Gorm小项目

2020年04月29日  | 移动技术网IT编程  | 我要评论

gin+gorm小项目

创建项目


e:\gostudent\gin\bubble>go mod tidy      //增加缺失的包,移除没用的包
package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

func main() {
   r := gin.default()
   //告诉gin框架去哪里找模板文件
   r.loadhtmlglob("templates/*")
   r.get("/", func(c *gin.context) {
      c.html(http.statusok, "", nil)
   })
   r.run(":9090")
}

引用静态文件



搭建架子

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

//tode model
type tode struct {
   id int `json:"id"`
   title string `json:"title"`
   status bool `json:"status"`
}

func main() {
   //创建数据库
   //sql: create database bubble;
   //连接数据库
   //遇事不决写注释
   r := gin.default()
   //告诉gin框架模板文件引用的静态文件去哪里找
   r.static("/static","static")
   //告诉gin框架去哪里找模板文件
   r.loadhtmlglob("templates/*")
   r.get("/", func(c *gin.context) {
      c.html(http.statusok, "", nil)
   })

   //v1 api
   v1group := r.group("v1")
   {
      //待办事项
      //添加
      v1group.post("/todo", func(c *gin.context) {

      })
      //查看所有的代办事项
      v1group.get("/todo", func(c *gin.context) {

      })
      //查看某一个代办事项
      v1group.get("/todo/:id", func(c *gin.context) {

      })
      //修改某一个待办事项
      v1group.put("/todo/:id", func(c *gin.context) {

      })
      //删除
      v1group.delete("/todo/:id", func(c *gin.context) {

      })
   }
   
   r.run(":9090")
}

创建数据库

func initmysql()  (err error)  {
   dsn := "root:123456@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parsetime=true&loc=local"
   db, err = gorm.open("mysql",dsn)
   //测试连通性
   err = db.db().ping()
   return
   //return db.db().ping()
}

func main() {
   //创建数据库
   //sql: create database bubble;
   //连接数据库
   err := initmysql()
   if err != nil {
      //可以搞个日志
      panic(err)
   }
   //模型绑定
   db.automigrate(&tode{})   //todos
   defer db.close()  //程序退出,关闭数据库

添加功能

      //待办事项
      //添加
      v1group.post("/todo", func(c *gin.context) {
         //前端页面填写待办事项,点击提交,会发请求到这里
         //1. 从请求中把数据拿出来
         var todo tode
         c.bindjson(&todo)
         //2. 存入数据库
         err = db.create(&todo).error
         //3. 返回响应
         if err != nil {
            c.json(http.statusok,gin.h{"error": err.error()})
         }else {
            c.json(http.statusok, todo)
            //c.json(http.statusok, gin.h{
            // "code": 200,
            // "msg" : "success",
            // "data": todo,
            //})
         }
        


查找功能

//查看所有的代办事项
v1group.get("/todo", func(c *gin.context) {
   //查询todo这个表里的所有数据
   var todelist []tode
   err := db.find(&todelist).error
   if err != nil {
      c.json(http.statusok, gin.h{"error": err.error()})
   }else {
      c.json(http.statusok, todelist)
   }
})
    //查看某一个代办事项
      v1group.get("/todo/:id", func(c *gin.context) {

      })

修改功能

 //修改某一个待办事项
      v1group.put("/todo/:id", func(c *gin.context) {
         id, ok := c.params.get("id")
         if !ok {
            c.json(http.statusok, gin.h{"error": "无效的id"})
            return
         }
         var todo todo
         if err = db.where("id=?", id).first(&todo).error; err!=nil{
            c.json(http.statusok, gin.h{"error": err.error()})
            return
         }
         c.bindjson(&todo)
         if err = db.save(&todo).error; err!= nil{
            c.json(http.statusok, gin.h{"error": err.error()})
         }else{
            c.json(http.statusok, todo)
         }
      })

删除功能

   //删除
      v1group.delete("/todo/:id", func(c *gin.context) {
         id, ok := c.params.get("id")
         if !ok {
            c.json(http.statusok, gin.h{"error": "无效的id"})
            return
         }
         if err = db.where("id=?", id).delete(todo{}).error;err!=nil{
            c.json(http.statusok, gin.h{"error": err.error()})
         }else{
            c.json(http.statusok, gin.h{id:"deleted"})
         }
      })

总代码

package main

import (
   "github.com/gin-gonic/gin"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
   "net/http"
)

var (
   db *gorm.db
)

//tode model
type todo struct {
   id int `json:"id"`
   title string `json:"title"`
   status bool `json:"status"`
}

func initmysql()  (err error)  {
   dsn := "root:123456@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parsetime=true&loc=local"
   db, err = gorm.open("mysql",dsn)
   //测试连通性
   err = db.db().ping()
   return
   //return db.db().ping()
}

func main() {
   //创建数据库
   //sql: create database bubble;
   //连接数据库
   err := initmysql()
   if err != nil {
      //可以搞个日志
      panic(err)
   }
   //模型绑定
   db.automigrate(&todo{})   //todos
   defer db.close()  //程序退出,关闭数据库
   //遇事不决写注释
   r := gin.default()
   //告诉gin框架模板文件引用的静态文件去哪里找
   r.static("/static","static")
   //告诉gin框架去哪里找模板文件
   r.loadhtmlglob("templates/*")
   r.get("/", func(c *gin.context) {
      c.html(http.statusok, "", nil)
   })

   //v1 api
   v1group := r.group("v1")
   {
      //待办事项
      //添加
      v1group.post("/todo", func(c *gin.context) {
         //前端页面填写待办事项,点击提交,会发请求到这里
         //1. 从请求中把数据拿出来
         var todo todo
         c.bindjson(&todo)
         //2. 存入数据库
         err := db.create(&todo).error
         if err != nil {
            c.json(http.statusok,gin.h{"error": err.error()})
         }else {
            c.json(http.statusok, todo)
            //c.json(http.statusok, gin.h{
            // "code": 200,
            // "msg" : "success",
            // "data": todo,
            //})
         }
         //3. 返回响应

      })
      //查看所有的代办事项
      v1group.get("/todo", func(c *gin.context) {
         //查询todo这个表里的所有数据
         var todelist []todo
         err := db.find(&todelist).error
         if err != nil {
            c.json(http.statusok, gin.h{"error": err.error()})
         }else {
            c.json(http.statusok, todelist)
         }
      })
      //查看某一个代办事项
      v1group.get("/todo/:id", func(c *gin.context) {

      })
      //修改某一个待办事项
      v1group.put("/todo/:id", func(c *gin.context) {
         id, ok := c.params.get("id")
         if !ok {
            c.json(http.statusok, gin.h{"error": "无效的id"})
            return
         }
         var todo todo
         if err = db.where("id=?", id).first(&todo).error; err!=nil{
            c.json(http.statusok, gin.h{"error": err.error()})
            return
         }
         c.bindjson(&todo)
         if err = db.save(&todo).error; err!= nil{
            c.json(http.statusok, gin.h{"error": err.error()})
         }else{
            c.json(http.statusok, todo)
         }
      })
      //删除
      v1group.delete("/todo/:id", func(c *gin.context) {
         id, ok := c.params.get("id")
         if !ok {
            c.json(http.statusok, gin.h{"error": "无效的id"})
            return
         }
         if err = db.where("id=?", id).delete(todo{}).error;err!=nil{
            c.json(http.statusok, gin.h{"error": err.error()})
         }else{
            c.json(http.statusok, gin.h{id:"deleted"})
         }
      })
   }
   r.run(":9090")
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网