gin+gorm快速入门

最近也是正在学习gin+gorm得组合,跟着网上得视频敲了一个很简单得小项目,麻雀虽小五脏俱全,还是值得记录以下。

一、gin包管理

创建项目目录以后,首先创建以下几个包
gin+gorm快速入门_第1张图片
这里我来分别说下他们的作用

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")
}

你可能感兴趣的:(gin,go)