golang练习项目-图书管理系统(golang入门书籍)

bookManager

项目结构

  1. contraller目录存放相关业务的处理函数
  2. dao目录存放数据库相关
  3. middleware存放中间件
  4. model存放模型
  5. router存放路由
  6. main.go项目入口

├── Readme.md├── contraller│ ├── book.go│ └── user.go├── dao│ └── mysql│ └── mysql.go├── go.mod├── go.sum├── main.go├── middleware│ └── auth.go├── model│ ├── book.go│ ├── user.go│ └── user_m2m_book.go└── router ├── api_router.go ├── init_router.go └── test_router.go

contraller

book.go

  1. 处理book相关操作的函数

package contrallerimport ( "bookManage/dao/mysql" "bookManage/model" "github.com/gin-gonic/gin" "strconv")// CreateBookHandler 创建新的bookfunc CreateBookHandler(c *gin.Context) { p := new(model.Book) if err := c.ShouldBind(p); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } mysql.DB.Create(p) c.JSON(200, gin.H{"msg": "success"})}// GetBookListHandler 获取book的listfunc GetBookListHandler(c *gin.Context) { books := []model.Book{} mysql.DB.Preload("Users").Find(&books) c.JSON(200, gin.H{"books": books})}// GetBookDetailHandler 获取book的详情func GetBookDetailHandler(c *gin.Context) { idStr := c.Param("id") bookId, _ := strconv.ParseInt(idStr, 10, 64) book := model.Book{Id: bookId} mysql.DB.Find(&book) c.JSON(200, gin.H{"books": book})}// UpdateBookHandler 更新book信息func UpdateBookHandler(c *gin.Context) { p := new(model.Book) if err := c.ShouldBindJSON(p); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } oldBook := &model.Book{Id: p.Id} var newBook model.Book if p.Name != "" { newBook.Name = p.Name } if p.Desc != "" { newBook.Desc = p.Desc } mysql.DB.Model(&oldBook).Updates(newBook) c.JSON(200, gin.H{"book": newBook})}// DeleteBookHandler 删除bookfunc DeleteBookHandler(c *gin.Context) { idStr := c.Param("id") bookId, _ := strconv.ParseInt(idStr, 10, 64) mysql.DB.Select("Users").Delete(&model.Book{Id: bookId}) c.JSON(200, gin.H{"msg": "success"})}

user.go

  1. 处理用户登陆相关的函数

package contrallerimport ( "bookManage/dao/mysql" "bookManage/model" "github.com/gin-gonic/gin" "github.com/google/uuid")// RegisterHandler 注册func RegisterHandler(c *gin.Context) { p := new(model.User) if err := c.ShouldBind(p); err != nil { c.JSON(400, gin.H{"err": err.Error()}) return } mysql.DB.Create(p) c.JSON(200, gin.H{"msg": p})}// LoginHandler 登陆func LoginHandler(c *gin.Context) { p := new(model.User) if err := c.ShouldBind(p); err != nil { c.JSON(403, gin.H{"err": err.Error()}) } u := model.User{Username: p.Username, Password: p.Password} if rows := mysql.DB.Where(&u).First(&u).Row(); rows == nil { c.JSON(403, gin.H{"msg": "error username or password"}) return } token := uuid.New().String() mysql.DB.Model(u).Update("token", token) c.JSON(200, gin.H{"token": token})}

dao

mysql

mysql.go

  1. mysql连接相关的函数

package mysqlimport ( "bookManage/model" "fmt" gmysql "gorm.io/driver/mysql" "gorm.io/gorm")var DB *gorm.DBfunc InitMysql() { // 1、连接数据库 dsn := "root:123456@tcp(127.0.0.1:3306)/books?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(gmysql.Open(dsn), &gorm.Config{}) if err != nil { fmt.Println("初始化mysql连接错误", err) } DB = db if err := DB.AutoMigrate(model.User{}, model.Book{}); err != nil { fmt.Println("自动创建表结构失败:", err) }}

middleware

auth.go

  1. 认证相关的函数

package middlewareimport ( "bookManage/dao/mysql" "bookManage/model" "github.com/gin-gonic/gin")func AuthMiddleware() func(c *gin.Context) { return func(c *gin.Context) { token := c.Request.Header.Get("token") var u model.User if rows := mysql.DB.Where("token = ?", token).First(&u).RowsAffected; rows != 1 { c.JSON(403, gin.H{"msg": "token 错误"}) c.Abort() return } c.Set("UserId", u.Id) c.Next() }}

model

book.go

  1. book的模型

package modeltype Book struct { Id int64 `json:"id" gorm:"primaryKey"` Name string `json:"name" gorm:"not null" binding:"required"` Desc string `json:"desc"` User []User `gorm:"many2many:book_users"`}func (Book) TableName() string { return "book"}

user.go

  1. user的模型

package modeltype User struct { Id int64 `json:"id" gorm:"primaryKey"` Username string `json:"username" gorm:"not null" binding:"required"` Password string `json:"password" gorm:"not null" binding:"required"` Token string `json:"token"`}func (User) TableName() string { return "user"}

userm2mbook.go

  1. user和book的中间表模型

package modeltype BookUser struct { UserID int64 `gorm:"primaryKey"` BookID int64 `gorm:"primaryKey"`}

router

api_router.go

  1. 路由相关

package routerimport ( "bookManage/contraller" "bookManage/middleware" "github.com/gin-gonic/gin")func LoadApiRouter(r *gin.Engine) { r.POST("/register", contraller.RegisterHandler) r.POST("/login", contraller.LoginHandler) v1 := r.Group("/api/v1") v1.Use(middleware.AuthMiddleware()) v1.POST("book", contraller.CreateBookHandler) v1.GET("book", contraller.GetBookListHandler) v1.GET("book/:id", contraller.GetBookDetailHandler) v1.PUT("book", contraller.UpdateBookHandler) v1.DELETE("book/:id", contraller.DeleteBookHandler)}

init_router

  1. 初始化路由

package routerimport "github.com/gin-gonic/gin"/*加载其他路由文件中的路由*/// 初始化其他文件中的路由func InitRouter() *gin.Engine { r := gin.Default() LoadApiRouter(r) return r}

main.go

  1. 主函数,入口

package mainimport ( "bookManage/dao/mysql" "bookManage/router")func main() { mysql.InitMysql() r := router.InitRouter() r.Run(":8000")}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月1日 上午8:16
下一篇 2022年9月1日 上午8:18

相关推荐

  • 中铁科研项目的成立

    中铁科研项目的成立 中铁科研项目的成立是中铁公司发展的重要里程碑,也是我国基础设施建设领域的一大突破。中铁科研项目的成立旨在推动我国基础设施建设的发展,提高基础设施建设的质量和效率…

    科研百科 2025年3月10日
    0
  • 江西省教育厅课题(江西省教育厅科研项目结题)

    江西省教育厅科研项目结题报告 随着科技的不断进步,教育也在不断发展。江西省教育厅科研项目结题报告是对近年来江西省教育厅科研项目的总结,旨在展示这些项目的完成情况,并为未来的科研项目…

    科研百科 2024年8月5日
    33
  • 项目管理的重要性有哪些

    项目管理的重要性有哪些 项目管理在现代社会扮演着越来越重要的角色。无论是企业还是个人,都需要通过项目管理来确保项目的成功完成。本文将探讨项目管理的重要性,以及如何有效地进行项目管理…

    科研百科 2024年9月4日
    28
  • 苏家屯区委组织部:涵养优秀组工文化 大力加强自身建设

    全国组织工作会议强调,要继承发扬组织部门优良传统和作风,着力打造政治上绝对可靠、对党绝对忠诚的组工干部队伍。今年以来,苏家屯区委组织部坚定践行习近平总书记提出的“讲政治、重公道、业…

    科研百科 2023年10月18日
    119
  • 大学导师科研项目做下来得多少钱

    大学导师科研项目做下来得多少钱 大学导师科研项目做下来得多少钱是一个备受关注的话题。许多学生和研究人员都期望能够参与导师的科研项目,获得高质量的研究机会和宝贵的经验。然而,科研项目…

    科研百科 2024年4月9日
    196
  • 【党建论坛】基层党建工作要用好绩效管理“助推器”(党建+绩效管理)

    始终坚持中国共产党的领导,是中国之治最基本、最稳定、最可靠的保障和关键所在。在推进国家治理体系和治理能力现代化的进程中,中国共产党高度重视党的纯洁性建设,坚持不懈抓好党内政治生态建…

    科研百科 2023年11月6日
    165
  • 昆明理工大学获资助一项科技部重点研发计划项目(昆明理工大学国家重点研发计划)

    近日,科技部公示了一批国家重点研发计划重点专项拟立项项目清单,由昆明理工大学牛昱宇教授作为项目负责人申报的“灵长类原肠发育与器官形成的命运决定调控机制”获得立项,资助经费3100万…

    科研百科 2024年4月12日
    157
  • 党内关系图

    党内关系图 党内关系图是反映党内各种关系和相互联系的图形符号。它可以用来表示党的领导、组织、机构、人员、决策、执行、监督等各个环节之间的关系。党内关系图是了解和研究党内政治生活的重…

    科研百科 2024年11月14日
    0
  • 项目进度管理系统源码

    项目进度管理系统源码 随着项目规模的不断扩大和团队的日益增多,项目进度管理已经成为了项目管理中不可或缺的一部分。一个好的项目进度管理系统能够帮助团队更好地协调和管理项目进度,提高项…

    科研百科 2024年8月20日
    38
  • 项目进度管理表格模板

    项目进度管理表格模板 项目进度管理是项目管理中非常重要的一部分,它可以帮助项目经理和团队更好地监控和管理项目进度,确保项目按时完成并达到预期目标。本文将介绍一个基本的项目进度管理表…

    科研百科 2024年8月19日
    35