Gin模板
阿新 • • 發佈:2020-08-26
簡單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() }
參考: