【Gin】(三)Gin 多路由+控制器+公共返回Json方法

一、环境安装

1、GO语言环境安装

【Golang】(二)Go语言环境安装_安装golang 环境-CSDN博客

 

2、Gin 介绍与环境搭建

https://blog.csdn.net/forest_long/article/details/139088121

 

二、代码结构

ed57a52927804a4da4fe4ad9076845ce.png

 

143abc1995bf43b1ab234b249216005e.png

 

 

三、代码实现

1、公共json返回函数封装

 

common/R.go

package common

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

type JsonStruct struct {
	Code  int         `json:"code"`
	Msg   interface{} `json:"msg"`
	Data  interface{} `json:"data"`
	Count int64       `json:"count"`
}

type JsonErrStruct struct {
	Code int         `json:"code"`
	Msg  interface{} `json:"msg"`
}

func RetSuccess(c *gin.Context, code int, msg interface{}, data interface{}, count int64) {
	json := &JsonStruct{
		code,
		msg,
		data,
		count,
	}
	c.JSON(http.StatusOK, json)
}

func RetError(c *gin.Context, code int, msg interface{}) {
	json := &JsonErrStruct{
		Code: code,
		Msg:  msg,
	}
	c.JSON(http.StatusOK, json)
}

 

2、控制器层

1)controller/user.go

package controller

import (
	"gin01/common"
	"github.com/gin-gonic/gin"
	"net/http"
)

type UserController struct{}

func (u UserController) GetUserList(c *gin.Context) {
	common.RetSuccess(c, http.StatusOK, "success", "user list", 1)
}

func (u UserController) GetUserInfo(c *gin.Context) {
	common.RetSuccess(c, http.StatusOK, "success", "user info", 1)
}

func (u UserController) GetUserErr(c *gin.Context) {
	common.RetError(c, http.StatusInternalServerError, "error")
}

 

2)controller/news.go

package controller

import (
	"gin01/common"
	"github.com/gin-gonic/gin"
	"net/http"
)

type NewsController struct{}

func (u NewsController) GetNewsList(c *gin.Context) {
	common.RetSuccess(c, http.StatusOK, "success", "news list", 1)
}

func (u NewsController) GetNewsInfo(c *gin.Context) {
	common.RetSuccess(c, http.StatusOK, "success", "news info", 1)
}

func (u NewsController) GetNewsErr(c *gin.Context) {
	common.RetError(c, http.StatusInternalServerError, "error")
}

 

3、路由层

1)router/user.go

package router

import (
	"gin01/controller"
	"github.com/gin-gonic/gin"
)

func RouterUser(r *gin.Engine) {

	user := r.Group("/user")
	{
		// 用户信息
		user.GET("/info", controller.UserController{}.GetUserInfo)

		// 用户列表
		user.GET("/list", controller.UserController{}.GetUserList)

		// 错误
		user.GET("/err", controller.UserController{}.GetUserErr)
	}

}

 

2)router/news.go

package router

import (
	"gin01/controller"
	"github.com/gin-gonic/gin"
)

func RouterNews(r *gin.Engine) {

	news := r.Group("/news")
	{
		news.GET("/list", controller.NewsController{}.GetNewsList)
		news.GET("/info", controller.NewsController{}.GetNewsInfo)
	}

}

 

4、主main入口

main.go

package main

import (
	"gin01/router"
	"github.com/gin-gonic/gin"
)

func main() {
	// 创建服务
	server := gin.Default()

	// 路由设置
	router.RouterUser(server)
	router.RouterNews(server)

	// 启动服务
	server.Run(":8080")
}

 

 

四、测试

http://localhost:8080/news/list

d681f5944fe34f9897c863040f5b73e3.png

 

 

http://localhost:8080/user/list

a3988f15040548caaa9d04e482113118.png

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你一个简单的示例代码,使用Gin框架接收JSON请求,并对MySQL数据库进行增删改查操作,并返回相应的JSON数据。 首先,你需要确保你的环境中已经安装了Gin和MySQL的驱动程序。你可以使用以下命令来安装它们: ``` go get -u github.com/gin-gonic/gin go get -u github.com/go-sql-driver/mysql ``` 接下来,我们将创建一个名为main.go的文件,作为我们的入口文件。在这个文件中,我们将创建一个Gin路由,并定义一些处理程序,用于处理不同的请求。 ```go package main import ( "database/sql" "fmt" "log" "net/http" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int `json:"id"` Name string `json:"name"` Age int `json:"age"` } func main() { // 连接 MySQL 数据库 db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() // 测试数据库连接 err = db.Ping() if err != nil { log.Fatal(err) } // 创建 Gin 路由 r := gin.Default() // 添加处理程序 r.POST("/users", addUser(db)) r.GET("/users/:id", getUser(db)) r.PUT("/users/:id", updateUser(db)) r.DELETE("/users/:id", deleteUser(db)) // 启动 HTTP 服务器 err = r.Run(":8080") if err != nil { log.Fatal(err) } } // 处理添加用户请求 func addUser(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { var user User err := c.BindJSON(&user) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } result, err := db.Exec("INSERT INTO users(name, age) VALUES(?, ?)", user.Name, user.Age) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } id, err := result.LastInsertId() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } user.ID = int(id) c.JSON(http.StatusOK, user) } } // 处理获取用户请求 func getUser(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("id") var user User err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name, &user.Age) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, user) } } // 处理更新用户请求 func updateUser(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("id") var user User err := c.BindJSON(&user) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } _, err = db.Exec("UPDATE users SET name = ?, age = ? WHERE id = ?", user.Name, user.Age, id) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, user) } } // 处理删除用户请求 func deleteUser(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("id") _, err := db.Exec("DELETE FROM users WHERE id = ?", id) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("User %s deleted", id)}) } } ``` 在这个示例代码中,我们创建了一个名为User的结构体,用于存储用户数据。我们还定义了四个处理程序,用于处理添加、获取、更新和删除用户的请求。这些处理程序都接受一个指向MySQL数据库的指针,以便它们可以对数据库进行操作。我们在每个处理程序中使用GinJSON绑定方法来解析请求的JSON数据,并使用MySQL的Exec和QueryRow方法来执行SQL语句。 最后,我们使用Gin路由方法将这些处理程序添加到路由中,并使用Run方法启动HTTP服务器。你可以使用以下命令来编译和运行这个示例代码: ``` go build -o app main.go ./app ``` 现在,你可以使用任何HTTP客户端向你的应用程序发送JSON请求,以进行增删改查操作。例如,你可以使用curl命令发送一个添加用户的请求: ``` curl -X POST -H "Content-Type: application/json" -d '{"name": "Alice", "age": 25}' http://localhost:8080/users ``` 应用程序将返回一个包含新创建用户的JSON数据的响应。你还可以使用GET、PUT和DELETE方法来执行其他操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forest_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值