Gin模板


简单Gin模板

创建数据库

mysql -uroot -p密码
create database 数据库名称;
show databases;
use 数据库名称;
show tables;

GROM框架

// 一. 数据库方面 / GROM框架

// 1. 创建数据库 --- 在命令行里搞定,如上
// mysql -uroot -p密码 
// create database 数据库名称

// 2. 定义结构体 / 模型 / 数据表
type User struct {
    gorm.Model	// 约定参数
    Age          int
    Name         string  `gorm:"default:'无名氏'"`
    Num          int     `gorm:"AUTO_INCREMENT"` // 自增
}

// 3. 初始化全局变量 / 也可以在函数内定义
var (
	DB *gorm.DB
)

// 4. 连接数据库 / 一般采用函数形式
func initMySQL()(err error) {
	dsn := "root:密码@tcp(127.0.0.1:3306)/数据库名称?charset=utf8mb4&parseTime=True&loc=Local"
	DB, err = gorm.Open("mysql", dsn)
	if err != nil {
		log.Fatalln("数据库连接错误:", err.Error())
	}

	return DB.DB().Ping()
}

// 连接
	err := initMySQL()
	if err != nil {
		panic(err)
	}


// 5. 模型绑定 / 即将模型(结构体)与数据库中的表相对应 / 即根据之前User结构体在数据库内创建一个表users
DB.AutoMigrate(&User{})

// 6. 延时关闭数据库
defer DB.Close()

// 7. 开始在进行CURD操作 / 在此之前先初始化一个gin框架,如下

Gin框架

// 二. Web后端框架方面 / Gin框架

// 1. 创建路由(使用中间件)
r := gin.Default()

// 2. 加载静态文件 / css、js、图片等
r.Static("/static", "static")

// 3. 解析 / 解析项目根目录下templates文件中所有文件 / ** 表示所有文件夹 * 表示所有文件
r.LoadHTMLGlob("./templates/*")

// 4. 渲染 / index.html文件
r.GET("/", func(c *gin.Context) {
    c.HTML(http.StatusOK, "index.html", nil)
})

// 5. 路由组  --- gin结合gorm-mysql数据库为例 ---
userGroup := r.Group("xiashe")

{
    // 添加 - 前端添加数据至数据库
    userGroup.POST("/user", func(c *gin.Context) {
        // 前端界面填写数据,点击提交会发请求到这里
        
        // 1. 将数据从请求中取出至user中
        var user User
        c.BindJSON(&user)
        // 2. 将数据存入数据库
        err = DB.Create(&user).Error
        if err != nil {
            c.JSON(http.StatusOK, gin.H{
                "error": err.Error(),
            })
        } else {
        // 3. 数据返回前端 / 返回响应
            c.JSON(http.StatusOK, user) 
        }
    })
    
    
    // 查看 --- 数据库所有数据
    userGroup.GET("/user", func(c *gin.Context) {
        // 1. 从数据库中查询user表里所有数据
        var userList []User
        err = DB.Find(&userList).Error
        if err != nil {
        	c.JSON(http.StatusOK, gin.H{"error": err.Error()})
        } else {
        // 2. 数据返回前端 / 返回响应
        	c.JSON(http.StatusOK, userList)
        }
    })

    // 修改
    userGroup.PUT("/user/:id", func(c *gin.Context) {
        
        // 1. 获取URL路径参数
        id, ok := c.Params.Get("id")
        if !ok {
            c.JSON(http.StatusOK, gin.H{"error": "无效id"})
            return
        }
		
        // 2. 在数据库中查询id对应行(数据)
        var user User
        err = DB.Where("id=?", id).First(&user).Error
        if err != nil {
            c.JSON(http.StatusOK, gin.H{"error":err.Error()})
            return
        }

        // 3. 参数绑定,自动提取user中数据
        c.ShouldBind(&user)
        
        // 4. 更新user对象中所有字段 / 即更新数据库
        err = DB.Save(&user).Error
        if err != nil {
            c.JSON(http.StatusOK, gin.H{"error": err.Error()})
            return
        } else {
            c.JSON(http.StatusOK, user)
        }
    })
    
    // 删除
    userGroup.DELETE("/user/:id", func(c *gin.Context) {
        
        // 1. 获取URL路径参数
        id, ok := c.Params.Get("id")
        if !ok {
            c.JSON(http.StatusOK, gin.H{"error": "无效id"})
        }
		
        // 2. 在数据库中删除对应字段
        err = DB.Where("id=?", id).Delete(User{}).Error
        if err != nil {
            c.JSON(http.StatusOK, gin.H{"error": err.Error()})
        } else {
            c.JSON(http.StatusOK, gin.H{id: "delete"})
        }
    })
}

// 6. 启动HTTP服务,默认在127.0.0.1:3000开启服务
r.Run(:3000) // 

项目结构拆分

基本结构

获取url请求 -> 控制器(controller) -> 业务逻辑(logic) -> 模型层的增删改查(model)

main函数一览

package main

import (
   _ "github.com/jinzhu/gorm/dialects/mysql"
   "log"
   "simpleProject/dao"		// 连接数据库
   "simpleProject/modols"	// 模型层 / 数据增删改查
   "simpleProject/routers"	// 路由层 / 注册路由
)



func main() {

   // 连接数据库
   err := dao.InitMySQL()
   if err != nil {
      log.Println("数据库连接错误:", err)
      return
   }

   // 模型绑定 / 将模型与数据库中的表相对应
   dao.DB.AutoMigrate(&modols.Todo{})

   // 关闭数据库链接
   defer dao.DB.Close()

   // 注册路由  -> 获取url请求 -> 控制器 —> 分配业务逻辑 -> 模型层的增删改查
   r := routers.SetRouter()

   r.Run()
}

参考:

gin官方文档

gorm官方文档

七米博客


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM