曾几何时,单词的记忆让我倍感困扰,于是我写下了一份备忘录,希望通过这种方式来提醒自己不忘却那些重要的词汇(其实就是懒)。
在高中,为了应付考试,不得已不得不去记下单词。然后天天死记硬背,写了不少小小的便利贴作为备份录。
在大学,为了考雅思or四六级,还是得硬着头皮去背单词。
….
(好吧,其实就是自己不想记单词)
其实,单词的记忆是一个至关重要的环节。我是比较鼓励写一个这种备忘录,进行重重复复观看。因为,对于学生时代来说,记不住单词常常成为他们学习的一大障碍。
这不仅影响了他们的四六级成绩,还可能对他们的学习英语兴趣和信心造成负面影响。因此,解决记不住单词的问题对于学生来说至关重要。
为了帮助学生解决记不住单词的问题,备忘录成了一个实用的工具。
通过备忘录,学生可以随时记录下重要的单词和短语,并随时查阅,以巩固记忆。此外,备忘录还可以帮助学生规划学习进度,提醒他们按时复习,从而提高学习效率。
以前是用纸写的备忘录,当然市面上还有各种app,层出不穷。但是试想一下,别人终究是别人的,为何自己不写一个备忘录呢?
为了更好地满足学生的需求,简单开发一个基于Go + Gin + Gorm + Vue的山寨版备忘录。
“源码放置: Gitee:https://gitee.com/nateshao/gin-todo-list Github:https://github.com/nateshao/gin-todo-list
Go语言具有简洁的语法、强大的并发处理能力和优秀的性能。它非常适合用于开发高效的后端应用。
Gin是一个用Go语言编写的Web框架,具有高性能和易用性。它可以快速构建Web应用程序和API。
在备忘录项目中的作用
Gorm是一个用Go语言编写的ORM库,用于与关系型数据库进行交互。它提供了丰富的功能,如CRUD操作、关联查询等。
在备忘录项目中的应用
简介与功能
在备忘录项目中的应用与实现
这里实现比较简单,直接实现对备忘录的增删改查
代码相对简单,后续可以再优化
package main
import (
"bubble/dao"
"bubble/models"
"bubble/routers"
)
func main() {
err := dao.InitMySQL()
if err != nil {
panic(err)
}
defer dao.Close() // 程序退出关闭数据库连接
// 模型绑定
dao.DB.AutoMigrate(&models.Todo{})
// 注册路由
r := routers.RegisterRouter()
r.Run()
}
package routers
import (
"bubble/controller"
"github.com/gin-gonic/gin"
)
func RegisterRouter() *gin.Engine {
r := gin.Default()
r.Static("/static", "static")
r.LoadHTMLGlob("templates/*")
r.GET("/", controller.IndexHandler)
v1Group := r.Group("v1")
{
v1Group.POST("/todo", controller.CreateTodo)
v1Group.GET("/todo", controller.GetTodoList)
v1Group.PUT("/todo/:id", controller.UpdateATodo)
v1Group.DELETE("/todo/:id", controller.DeleteATodo)
}
return r
}
package controller
import (
"bubble/models"
"github.com/gin-gonic/gin"
"net/http"
)
func IndexHandler(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
}
func CreateTodo(c *gin.Context) {
// 1. 从请求中把数据拿出来
var todo models.Todo
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, todo)
}
}
func GetTodoList(c *gin.Context) {
// 查询todo这个表里的所有数据
todoList, err := models.GetAllTodo()
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, todoList)
}
}
func UpdateATodo(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
todo, err := models.GetATodo(id)
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
return
}
c.BindJSON(&todo)
if err = models.UpdateATodo(todo); err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, todo)
}
}
func DeleteATodo(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: "deleted"})
}
}
package models
import (
"bubble/dao"
)
// Todo Model
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
// CreateATodo 创建todo
func CreateATodo(todo *Todo) (err error) {
err = dao.DB.Create(&todo).Error
return
}
func GetAllTodo() (todoList []*Todo, err error) {
if err = dao.DB.Find(&todoList).Error; err != nil {
return nil, err
}
return
}
func GetATodo(id string) (todo *Todo, err error) {
todo = new(Todo)
if err = dao.DB.Debug().Where("id=?", id).First(todo).Error; err != nil {
return nil, err
}
return
}
func UpdateATodo(todo *Todo) (err error) {
err = dao.DB.Save(todo).Error
return
}
func DeleteATodo(id string) (err error) {
err = dao.DB.Where("id=?", id).Delete(&Todo{}).Error
return
}
package dao
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var (
DB *gorm.DB
)
func InitMySQL() (err error) {
dsn := "root:123456@tcp(127.0.0.1:3306)/todo_list?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open("mysql", dsn)
if err != nil {
return
}
return DB.DB().Ping()
}
func Close() {
DB.Close()
}
golang入门简单,想要精通也并非易事,Go是一种静态类型、编译型的编程语言,具有简洁的语法和强大的并发处理能力。
好处方面:
不好的地方:
参考文献
七米老师:https://www.bilibili.com/video/BV1gJ411p7xC