基于Qimi老师的教学视频写的golang小项目--小清单

361 阅读2分钟

主函数--main.go

package main

import (
   "bubble/dao"
   "bubble/routers"
)

func main() {
   dao.InitDb()
   r := routers.InitRouter()
   r.Run(":9000")
}

dao--mysql.go

package dao

import (
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)

type TodoList struct {
   ID     int    `json:"id"`
   Title  string `json:"title"`
   Status bool   `json:"status"`
}

var DB *gorm.DB
var err error

func InitDb() {
   dsn := "root:password@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local"
   DB, err = gorm.Open("mysql", dsn)
   if err != nil {
      return
   }
   //禁用默认表名的复数形式
   DB.SingularTable(true)
   //迁移建表
   DB.AutoMigrate(&TodoList{})
   //设置连接池中的最大闲置连接数
   DB.DB().SetMaxOpenConns(10)
}

这里注意要把dsn中的用户名和密码改成自己的 db也是自己的database喔

routers--router.go

package routers

import (
   "bubble/api"
   "github.com/gin-gonic/gin"
)

func InitRouter() *gin.Engine {
   r := gin.Default()
   //告诉gin框架模板文件引用的静态文件去哪里找
   r.Static("/static", "static")
   //告诉gin框架去哪里找模板文件
   r.LoadHTMLGlob("templates/*")
   r.GET("/", api.IndexHandler)
   v1Group := r.Group("v1")
   { //代办事项
      //添加
      v1Group.POST("/todo", api.AddTodo)
      //查看所有的待办事项
      v1Group.GET("/todo", api.GetAllTodos)
      //修改某一待办事项
      v1Group.PUT("/todo/:id", api.UpdateTodo)
      //删除某一待办事项
      v1Group.DELETE("/todo/:id", api.DeleteTodo)
   }
   return r
}

api--router.go

package api

import (
   "bubble/dao"
   "bubble/models"
   "github.com/gin-gonic/gin"
   _ "github.com/jinzhu/gorm"
   "net/http"
)

func IndexHandler(c *gin.Context) {
   c.HTML(http.StatusOK, "index.html", nil)
}

func AddTodo(c *gin.Context) {
   //前端页面填写待办事项 点击提交 会发请求到这里
   //1.从请求中把数据拿出来
   var todo dao.TodoList
   c.BindJSON(&todo)
   //2.存入数据库
   err := models.CreateATodo(&todo)
   if err != nil {
      c.JSON(http.StatusOK, gin.H{"error": err.Error()})
   } else {
      c.JSON(http.StatusOK, gin.H{
         "code": 2000,
         "msg":  "success",
         "data": todo,
      })
   }
   //3.返回响应
}
func GetAllTodos(c *gin.Context) {
   todolist, err := models.GetAllTodo()
   if err != nil {
      c.JSON(http.StatusOK, gin.H{"error": err.Error()})
   } else {
      c.JSON(http.StatusOK, todolist)
   }
}
func UpdateTodo(c *gin.Context) {
   id, ok := c.Params.Get("id")
   if !ok {
      c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
      return
   }
   todo, err := models.GetTodoById(id)
   if err != nil {
      c.JSON(http.StatusOK, gin.H{"error": err.Error()})
      return
   }
   c.BindJSON(&todo)
   if err = models.UpdataATodo(todo); err != nil {
      c.JSON(http.StatusOK, gin.H{"error": err.Error()})
   } else {
      c.JSON(http.StatusOK, todo)
   }
}
func DeleteTodo(c *gin.Context) {
   id, ok := c.Params.Get("id")
   if !ok {
      c.JSON(http.StatusOK, gin.H{
         "error": "无效的id",
      })
      return
   }
   if err := models.DeleteATodo(id); err != nil {
      c.JSON(http.StatusOK, gin.H{"error": err.Error()})
   } else {
      c.JSON(http.StatusOK, gin.H{id: "delete"})
   }
}

models--todo.go

package models

import "bubble/dao"

//Todo 增删改查
//创建todo
func CreateATodo(todo *dao.TodoList) (err error) {
   err = dao.DB.Create(&todo).Error

   return err
}
func GetAllTodo() (todo []*dao.TodoList, err error) {
   if err = dao.DB.Find(&todo).Error; err != nil {
      return nil, err
   }
   return
}
func GetTodoById(id string) (todo *dao.TodoList, err error) {
   todo = new(dao.TodoList)
   if err = dao.DB.Where("id=?", id).First(&todo).Error; err != nil {
      return nil, err
   }
   return
}
func UpdataATodo(todo *dao.TodoList) (err error) {
   err = dao.DB.Save(todo).Error
   return
}
func DeleteATodo(id string) (err error) {
   err = dao.DB.Where("id=?", id).Delete(&dao.TodoList{}).Error
   return
}

总结

以上就是后端的内容啦 大概就是这个样子

image.png 因为笔者纯属是go小白,并且没有学习过前端技术,所以图上的static和templates文件夹的前端相关内容都来自于Qimi老师

页面展示

image.png

在文本栏中输入待办事项:

image.png

数据库:

image.png 因为没有完成所以status中显示的是 0 点击对勾

image.png 会发现代办事情上有了删除线

image.png 同时数据库中也将status改成了1 进行删除操作

image.png 删除之前

image.png 删除之后(为了效果引入第二个代办事务)

image.png 数据库中的信息

最后

如果有感兴趣的go小白,欢迎去GitHub上去下载完整代码 链接在这里喔CloserLu/Go_Bubble: 基于Qimi老师的课程编写的Go小项目 (github.com)