最近也是正在学习gin+gorm得组合,跟着网上得视频敲了一个很简单得小项目,麻雀虽小五脏俱全,还是值得记录以下。
一、gin包管理
创建项目目录以后,首先创建以下几个包
这里我来分别说下他们的作用
1. conf : 配置文件
2. controllers : 控制模块, 主要用于处理业务逻辑
3. models :模型层, 存放模型以及和模型操作相关的函数
4. dao : 数据库层:用于连接数据库
5. routers :路由管理
6. static : 存放静态文件
7. utils : 存放工具包
8. views : 存放web页面
这里的templates是我用于练习用的。
二、gorm基本操作
2.1 连接数据库(dao包)
package dao
import "github.com/jinzhu/gorm"
import _ "github.com/go-sql-driver/mysql"
var (
DB *gorm.DB
)
// InitMysql 连接数据库
func InitMysql() (err error) {
dsn := "juntao:123456@tcp(127.0.0.1:3306)/myblog?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open("mysql", dsn)
if err != nil {
return
}
return DB.DB().Ping()
}
2.2 创建模型(model包)
type Todo struct {
Id int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
2.3 设置路由(router包)
package router
import (
"github.com/gin-gonic/gin"
"net/http"
"project/element/controller"
)
func SetupRouter() *gin.Engine {
router := gin.Default()
// 加载静态文件
router.Static("/static", "static")
router.LoadHTMLGlob("templates/*")
router.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
}
2.4 业务层处理相关函数(controllers包)
注(一般的业务处理方式为:/*
url --> controller --> logic --> model
请求来了 --> 控制器 --> 业务逻辑 --> 模型层的增删改查
*/) 在这里由于项目过于简单,所以我没有创建logic包。
demo :
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
"project/element/model"
)
func AddTodo (c *gin.Context) {
var todo model.Todo
// 获取数据
c.BindJSON(&todo)
// 存入数据库, 返回响应
err := model.CreateATodo(&todo)
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todo)
}
}
2.5 启动项目(main函数)
package main
import (
"project/element/dao"
"project/element/model"
router2 "project/element/router"
)
func main() {
err := dao.InitMysql()
if err != nil {
panic(err)
}
// 延时关闭连接
defer dao.DB.Close()
// 自动创建表
dao.DB.AutoMigrate(&model.Todo{})
router := router2.SetupRouter()
router.Run(":8988")
}