一、环境安装
1、GO语言环境安装
【Golang】(二)Go语言环境安装_安装golang 环境-CSDN博客
2、Gin 介绍与环境搭建
https://blog.csdn.net/forest_long/article/details/139088121
二、代码结构
三、代码实现
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
http://localhost:8080/user/list