Gin+Gorm小项目
Posted zisefeizhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gin+Gorm小项目相关的知识,希望对你有一定的参考价值。
Gin+Gorm小项目
创建项目
E:gostudentginubble>go mod tidy //增加缺失的包,移除没用的包
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
//告诉gin框架去哪里找模板文件
r.LoadhtmlGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
r.Run(":9090")
}
引用静态文件
搭建架子
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
//Tode Model
type Tode struct {
ID int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
func main() {
//创建数据库
//sql: CREATE DATABASE bubble;
//连接数据库
//遇事不决写注释
r := gin.Default()
//告诉gin框架模板文件引用的静态文件去哪里找
r.Static("/static","static")
//告诉gin框架去哪里找模板文件
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
//v1 api
v1Group := r.Group("v1")
{
//待办事项
//添加
v1Group.POST("/todo", func(c *gin.Context) {
})
//查看所有的代办事项
v1Group.GET("/todo", func(c *gin.Context) {
})
//查看某一个代办事项
v1Group.GET("/todo/:id", func(c *gin.Context) {
})
//修改某一个待办事项
v1Group.PUT("/todo/:id", func(c *gin.Context) {
})
//删除
v1Group.DELETE("/todo/:id", func(c *gin.Context) {
})
}
r.Run(":9090")
}
创建数据库
func initmysql() (err error) {
dsn := "root:123456@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open("mysql",dsn)
//测试连通性
err = DB.DB().Ping()
return
//return DB.DB().Ping()
}
func main() {
//创建数据库
//sql: CREATE DATABASE bubble;
//连接数据库
err := initMySQL()
if err != nil {
//可以搞个日志
panic(err)
}
//模型绑定
DB.AutoMigrate(&Tode{}) //todos
defer DB.Close() //程序退出,关闭数据库
添加功能
//待办事项
//添加
v1Group.POST("/todo", func(c *gin.Context) {
//前端页面填写待办事项,点击提交,会发请求到这里
//1. 从请求中把数据拿出来
var todo Tode
c.BindJSON(&todo)
//2. 存入数据库
err = DB.Create(&todo).Error
//3. 返回响应
if err != nil {
c.JSON(http.StatusOK,gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todo)
//c.JSON(http.StatusOK, gin.H{
// "code": 200,
// "msg" : "success",
// "data": todo,
//})
}
查找功能
//查看所有的代办事项
v1Group.GET("/todo", func(c *gin.Context) {
//查询todo这个表里的所有数据
var todeList []Tode
err := DB.Find(&todeList).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todeList)
}
})
//查看某一个代办事项
v1Group.GET("/todo/:id", func(c *gin.Context) {
})
修改功能
//修改某一个待办事项
v1Group.PUT("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
var todo Todo
if err = DB.Where("id=?", id).First(&todo).Error; err!=nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
return
}
c.BindJSON(&todo)
if err = DB.Save(&todo).Error; err!= nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, todo)
}
})
删除功能
//删除
v1Group.DELETE("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
if err = DB.Where("id=?", id).Delete(Todo{}).Error;err!=nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, gin.H{id:"deleted"})
}
})
总代码
package main
import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"net/http"
)
var (
DB *gorm.DB
)
//Tode Model
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
func initMySQL() (err error) {
dsn := "root:123456@tcp(127.0.0.1:3306)/bubble?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open("mysql",dsn)
//测试连通性
err = DB.DB().Ping()
return
//return DB.DB().Ping()
}
func main() {
//创建数据库
//sql: CREATE DATABASE bubble;
//连接数据库
err := initMySQL()
if err != nil {
//可以搞个日志
panic(err)
}
//模型绑定
DB.AutoMigrate(&Todo{}) //todos
defer DB.Close() //程序退出,关闭数据库
//遇事不决写注释
r := gin.Default()
//告诉gin框架模板文件引用的静态文件去哪里找
r.Static("/static","static")
//告诉gin框架去哪里找模板文件
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
//v1 api
v1Group := r.Group("v1")
{
//待办事项
//添加
v1Group.POST("/todo", func(c *gin.Context) {
//前端页面填写待办事项,点击提交,会发请求到这里
//1. 从请求中把数据拿出来
var todo Todo
c.BindJSON(&todo)
//2. 存入数据库
err := DB.Create(&todo).Error
if err != nil {
c.JSON(http.StatusOK,gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todo)
//c.JSON(http.StatusOK, gin.H{
// "code": 200,
// "msg" : "success",
// "data": todo,
//})
}
//3. 返回响应
})
//查看所有的代办事项
v1Group.GET("/todo", func(c *gin.Context) {
//查询todo这个表里的所有数据
var todeList []Todo
err := DB.Find(&todeList).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, todeList)
}
})
//查看某一个代办事项
v1Group.GET("/todo/:id", func(c *gin.Context) {
})
//修改某一个待办事项
v1Group.PUT("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
var todo Todo
if err = DB.Where("id=?", id).First(&todo).Error; err!=nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
return
}
c.BindJSON(&todo)
if err = DB.Save(&todo).Error; err!= nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, todo)
}
})
//删除
v1Group.DELETE("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "无效的id"})
return
}
if err = DB.Where("id=?", id).Delete(Todo{}).Error;err!=nil{
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else{
c.JSON(http.StatusOK, gin.H{id:"deleted"})
}
})
}
r.Run(":9090")
}
以上是关于Gin+Gorm小项目的主要内容,如果未能解决你的问题,请参考以下文章
Go实战Gin + Gorm 基于RESTful API 的简单备忘录 | 含接口文档
如何使用 Gin 和 Gorm 搭建一个简单的 API 服务