3_gin日拱一足---项目拆分 --- 日拱一足系列

项目拆分 — 日拱一足系列

1.将handlerFunc处理函数移除main函数

package main

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

func main() {
	//项目的拆分---第一个阶段 将handlerFunc从main函数中分离出来
	r := gin.Default()
	r.GET("/index",Handlerindex)
	r.Run()
}

func Handlerindex(c *gin.Context){
	c.JSON(http.StatusOK,gin.H{
		"name":  "chenjunde",
		"age": 21,
	})
}

在这里插入图片描述

2.将处理逻辑移出main.go函数

routers.go:

package main

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

func setUpRouter()(r *gin.Engine){
	r = gin.Default()
	r.GET("/index",Handlerindex)
	return
}

func Handlerindex(c *gin.Context){
	c.JSON(http.StatusOK,gin.H{
		"name":  "junde",
		"age": 21,
	})
}

main.go

package main

func main() {
	//项目的拆分---第一个阶段 我们将处理逻辑和处理函数从main.go文件中拆除 生成routers.go
	r := setUpRouter()
	r.Run()
}

在这里插入图片描述

3.将路由代码拆分routers包

gin_demo
├── go.mod
├── go.sum
├── main.go
└── routers
    └── routers.go

注意将上面的SetUoRouter()函数的首字母变成大写,可以被包外的访问

4.将路由拆分成多个文件

但我们的业务不断变大 一个routers.go不能满足我们的需求(把所有的路由注册都写在SetupRouter函数中)

gin_demo
├── go.mod
├── go.sum
├── main.go
└── routers
    ├── blog.go
    └── shop.go

main函数:

package main

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

func main() {
	//项目的拆分---第四个阶段,我们将不同的路由和业务放在不同的routers文件下
	// 比如我们有两个业务线: blog(博客) shop(商城)
	r := gin.Default()
	routers.Blog(r)
	routers.Shop(r)
	r.Run()
}

routers包-----blog.go

package routers

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

func Blog(r *gin.Engine)(){
	shop := r.Group("/blog")
	shop.GET("/goumai",HandlerGoumai)
	shop.GET("/index",HandlerIndex)
}
func HandlerGoumai(c *gin.Context){
	c.String(http.StatusOK,"这是购买的处理函数")
}
func HandlerIndex(c *gin.Context){
	c.String(http.StatusOK,"这是首页的处理函数")
}

routers包----shop.go

package routers

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

func Shop(r *gin.Engine)(){
	shop := r.Group("/shop")
	shop.GET("/goumai",HandlerShop)
	shop.GET("/index",HandlerShopIndex)
}
func HandlerShop(c *gin.Context){
	c.String(http.StatusOK,"这是购买的处理函数")
}
func HandlerShopIndex(c *gin.Context){
	c.String(http.StatusOK,"这是首页的处理函数")
}

5.将不同的业务拆分成不同的APP

在这里插入图片描述

比较便于横向的进行扩展

main函数:

package main

import (
	"fmt"
	"text_play/app/blog"
	"text_play/app/shop"
	"text_play/routers"
)

func main() {
	//将App加载在一个slice切片中 
	//Init初始化: 初始化*gin.Engine引擎,并且将Engine经过所有的App中执行相关的路由和处理函数
	routers.Include(shop.Shop,blog.Blog)
	//初始化路由
	r := routers.Init()
	if err := r.Run(); err != nil {
		fmt.Println("start service failed,err:%v\n",err)
	}
}

./routers/router.go

package routers

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

type Option func(*gin.Engine)

var options = []Option{}

//注册app的路由配置
func Include(opts ...Option){
	options = append(options,opts...)
}
//初始化
func Init() *gin.Engine{
	r := gin.New()
	for _ ,opt := range options {
		opt(r)
	}
	return r
}

./app/blog/handler.go

package blog

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

func HandlerGoumai(c *gin.Context){
	c.String(http.StatusOK,"这是购买的处理函数")
}
func HandlerIndex(c *gin.Context){
	c.String(http.StatusOK,"这是首页的处理函数")
}

./app/blog/router.go

package blog

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

func Blog(r *gin.Engine)(){
	shop := r.Group("/blog")
	shop.GET("/goumai",HandlerGoumai)
	shop.GET("/index",HandlerIndex)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值