1. 程式人生 > 實用技巧 >Gin模板

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官方文件

七米部落格