首页 > 其他分享 >Gin控制器分离

Gin控制器分离

时间:2024-01-17 11:15:17浏览次数:19  
标签:200 控制器 String GET 分离 api func gin Gin

Gin控制器分离

1 函数式

/*
	apiRouters.GET("/", func(c *gin.Context) {
			c.String(200, "我是一个api接口")
		})
	这样的一个路由注册我们发现,后面都跟了一个匿名函数,那我们将这个匿名函数全部取出来放在一个固定的地方就可以实现路由和业务逻辑的分离了
*/

1.1 将adminRouters.go中的业务逻辑全部取出

创建一个controllers文件夹,按照模块创建相应的文件夹以及文件,这些文件我们就用来存储相应的业务逻辑

pFFUEtK.png

admin.go 还需要加上函数名

package admin

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

func AdminIndex(c *gin.Context) {
	c.String(200, "后台首页")
}

func AdminUser(c *gin.Context) {
	c.String(200, "用户列表")
}

func AdminUserAdd(c *gin.Context) {
	c.String(200, "增加用户")
}

func AdminUserEdit(c *gin.Context) {
	c.String(200, "修改用户")
}

func AdminNews(c *gin.Context) {
	c.String(200, "新闻列表")
}
/*  将业务逻辑全部写在一起方便管理 */

adminRouter.go

/*  回到路由配置中  */

package routers

import (
	"github.com/gin-gonic/gin"

	"awesomeProject/gin/controllers/admin"
)

func AdminRoutersInit(r *gin.Engine) {
	adminRouters := r.Group("/admin")
	{
		adminRouters.GET("/", admin.AdminIndex)
		adminRouters.GET("/user", admin.AdminUser)
		adminRouters.GET("/user/add", admin.AdminUserAdd)
		adminRouters.GET("/user/edit", admin.AdminUserEdit)
		adminRouters.GET("/article", admin.AdminNews)
	}
}


/* 不需要加() 加()了的话就变成了执行函数了 */

2 结构体式

做法很简单,我们只需要将具体的业务逻辑写在结构体中就行了

api.go

package api

import "github.com/gin-gonic/gin"

type ApiController struct{}

func (con ApiController) Api(c *gin.Context) {
	c.String(200, "我是一个api接口")
}

func (con ApiController) ApiUserList(c *gin.Context) {
	c.String(200, "我是一个api接口userlist")
}

func (con ApiController) ApiPlist(c *gin.Context) {
	c.String(200, "我是一个api接口plist")
}

func (con ApiController) ApiCart(c *gin.Context) {
	c.String(200, "我是一个api接口cart")
}

apiRouters.go

package routers

import (
	"awesomeProject/gin/controllers/api"
	"github.com/gin-gonic/gin"
)

func ApiRoutersInit(r *gin.Engine) {
	apiRouters := r.Group("/api")
	{
		apiRouters.GET("/", api.ApiController{}.Api)
		apiRouters.GET("/userlist", api.ApiController{}.ApiUserList)
		apiRouters.GET("/plist", api.ApiController{}.ApiPlist)
		apiRouters.GET("/cart", api.ApiController{}.ApiCart)
	}
}

标签:200,控制器,String,GET,分离,api,func,gin,Gin
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/17969488

相关文章

  • Gin单文件上传以及多文件上传
    Gin单文件上传以及多文件上传1单文件上传funcmain(){router:=gin.Default()//为multipartforms设置较低的内存限制(默认是32MiB)//router.MaxMultipartMemory=8<<20//8MiBrouter.POST("/upload",func(c*gin.Context){file......
  • Gin中间件
    Gin中间件1中间件简介/* Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。*/在gin中的Default的方法中已经有两个中间件了://Defaul......
  • Gin 文件上传 按照日期存储
    Gin文件上传按照日期存储1实现步骤/* 1.获取上传的文件 2.获取后缀名判断类型是否正确.jpg.png.gif.jpeg 3.创建图片保存目录static/upload/20240101 4.生成文件名称和文件保存的目录 5.保存*/2代码//获取当前的日期funcGetDay()string{ template:="......
  • Gin中的Session
    Gin中的Session1Session简单介绍session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。2Session的工作流程当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对,然后将va......
  • Gin中的Cookie
    Gin中的Cookie1Cookie简介/* ●HTTP是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie或者Sessio......
  • GIn入门
    Gin入门1.Gin安装goget-ugithub.com/gin-gonic/gin2.将gin引入到代码中:import"github.com/gin-gonic/gin"2.1(可选)如果使用诸如http.StatusOK之类的常量,则需要引入net/http包:import"net/http"2.2初始化gomodgomodinit/*生成go.mod文件,此命令会在当......
  • 出现了HTTPSConnectionPool(host=‘huggingface.co‘, port=443)错误的解决方法
    在下载huggingface模型的时候,经常会出现这个错误,HTTPSConnectionPool(host=‘huggingface.co’,port=443)。如在下载Tokenizer的时候,tokenizer=AutoTokenizer.from_pretrained("csebuetnlp/mT5_multilingual_XLSum")就会出现以上的错误HTTPSConnectionPool(host=‘hug......
  • Inserting a node at beginning,全局变量头指针【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,全局变量头指针#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};node*A;voidinsert(intx){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=A;//新节点尾巴指......
  • Inserting a node at beginning,局部变量头指针版本1【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,局部变量头指针版本1#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};node*insert(intx,node*A){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=A;//新节......
  • Inserting a node at beginning,局部变量头指针版本2【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,局部变量头指针版本2#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};voidinsert(intx,node**A){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=*A;//新......