路由路由的分组路由的多种数据格式响应路由的拆分与注册01.03.02.目录URL重定向04.01路由的分组•路由分组定义•路由分组使用1路由的分组/login/user1/login/admin/logout/user1/logout/admin将具有一类功能的路由放到一起通常也会将不同版本的路由分成一个组路由分组的定义将具有一类功能的路由放到一起通常也会将不同版本的路由分成一个组常见应用:首页路由组、用户路由组、后台管理路由组等路由分组的使用/login/username/logout/username1路由的分组homePageRouters:=r.Group("/"){homePageRouters.GET("/",func(c*gin.Context)){c.string(200,"首页")}homePageRouters.GET("/login",func(c*gin.Context)){c.string(200,"登录")}homePageRouters.GET("/logout",func(c*gin.Context)){c.string(200,"登出")}homePageRouters.GET("/Commodityclassification",func(c*gin.Context)){c.string(200,"商品分类")}}设置首页路由组为/组内包含首页、登录、登出、商品分类02路由的拆分与注册•路由的拆分•路由的注册2路由的拆分与注册原目录结构路由拆分后目录结构gin_demo├──go.mod├──go.sum├──main.go└──routers.gogin_demo├──go.mod├──go.sum├──main.go└──routers└──routers.go把路由拆分成单独的文件或包即:拆分成多个文件路由的拆分将main.go文件中路由部分的代码拆分出来,形成单独的文件或包。从而避免当项目规模增大后,main.go文件代码过于庞大路由的拆分的使用路由的注册不管拆分的路由还是没拆分的路由,路由的注册方式都是一样的:需要在文件中注册路由,供main.go去调用。2路由的拆分与注册routes/A.gofuncA(r*gin.Engine){r.GET("/he1",he1Handler)r.GET("/load1",load1Handler)//...}routes/B.gofuncB(r*gin.Engine){r.GET("/he2",he2Handler)r.GET("/load2",load2Handler)//...}main.go文件funcmain(){r:=gin.Default()routers.A(r)routers.B(r)……r.Run();}路由拆分成多个文件2路由的拆分与注册app/blog/router.gofuncRouters(e*gin.Engine){e.GET("/post",postHandler)e.GET("/comment",commentHandler)}app/shop/router.gofuncRouters(e*gin.Engine){e.GET("/goods",goodsHandler)e.GET("/checkout",checkoutHandler)}gin_demo├──app│├──blog││├──handler.go││└──router.go│└──shop│├──handler.go│└──router.go├──go.mod├──go.sum├──main.go└──routers└──routers.go路由拆分到不同的APP2路由的拆分与注册main.gofuncmain(){//加载多个APP的路由配置routers.Include(shop.Routers,blog.Routers)//初始化路由r:=routers.Init()iferr:=r.Run();err!=nil{//...}}routes/routes.gotypeOptionfunc(*gin.Engine)varoptions=[]Option{}//注册app的路由配置funcInclude(opts...Option){options=append(options,opts...)}//初始化funcInit()*gin.Engine{r:=gin.New()for_,opt:=rangeoptions{opt(r)}returnr}路由拆分到不同的APP03路由的多种数据格式响应•JSON格式•XML格式•HTML模板渲染3路由的多种数据格式响应//JSONserializesthegivenstructasJSONintotheresponsebody.//ItalsosetstheContent-Typeas"application/json".func(c*Context)JSON(codeint,objany){c.Render(code,render.JSON{Data:obj})}JSON渲染gin.H类型//Hisashortcutformap[string]interface{}typeHmap[string]any•Restful风格的API所输出的大多都是JSON格式的内容•相比较旧的XML格式,JSON格式轻便、简洁、易于传输•使用了gin.H类型来构建了一个键值对对象3路由的多种数据格式响应packagemainimport("github.com/gin-gonic/gin")funcmain(){//创建基础路由,赋值变量rr:=gin.Default()//使用GET请求r.GET("/JSON",func(c*gin.Context){c.JSON(200,gin.H{"name":"Gin","city":"深圳"})})//调用Run函数,监听8080端口r.Run(":8080")}•JSON全拼是JavaScriptObjectNotation•JSON使用Javascript语法来描述数据对象,但是JSON独立于语言和平台•JSON类似XML,但比XML更小、更快,更易解析、易于人阅读和编写3路由的多种数据格...