Beego源码解析(二)-路由机制

本文深入探讨了Beego框架的路由机制,包括固定路由、正则路由和自动路由的实现。重点解析了ControllerInterface接口、Controller结构体以及ControllerRegister如何管理Controller。文章通过一个简单的示例展示了路由注册过程,并详细阐述了路由树的构建和节点添加,帮助读者理解Beego内部如何处理HTTP请求。
摘要由CSDN通过智能技术生成

原文地址:
Beego源码解析(二)-路由机制


上一篇文章介绍了 Beego关于配置项初始化的流程。那么今天就来说说在 Beego中非常重要的路由机制.
Beego到现在 v1.6.1版本为止支持了:固定路由正则路由自动路由这三种路由方法.
关于这三种路由的详细用法可以参考官方给出的开发文档,这里面已经记录的很全面了.

所以我们今天这篇文章就是要介绍这三种路由是如何在 Beego内部实现的.

关于 Beego的源码注释可以见我的Github

一个简单的示例

让我们先从官网给出的示例开始,下面是会在浏览器中打印”HelloWorld”的一个Beego程序.

package main

import(
    "github.com/astaxie/beego"
)

type MainController struct {
    beego.Controller
}

func (this *MainController) Get() {
    this.Ctx.WriteString("Hello World")
}

func main() {
        beego.Router("/",&MainController{})
        beego.Run()
}

我们需要先知道它干了什么:
1. 自定义了一个内含 beego.Controller(这个类型后面会讲到)控制器的 MainController
2. 重写了 MainController的 Get()方法,熟悉 Go语言的应该知道这个方法来自 Controller
3. 在 main()函数中调用了 beego.Router()方法注册了路由”/”和一个 MainController实例
4. 执行了 beego.Run()方法启用了 beego程序

重要的类型和接口

为了不在接下来的流程中打断,在介绍流程之前需要先了解 beego中关于路由的一些东西

ControllerInterface 接口

源文件中的位置: beego/controller.go:90

type ControllerInterface interface {
        Init(ct *context.Context,controllerName,actionName string,app interface{})
        Prepare()
        Get()
        Post()
        Delete()
        Put()
        Head()
        Patch()
        Options()
        Finish()
        Render() error
        XSRFToken() string
        CheckXSRFCookie() bool
        HandlerFunc(fn string) bool
        URLMapping()
}

这个接口定义了 15个方法,看名字就能够知道这是每个 Controller都需要实现的接口

Controller结构体

位置 beego/controller.go:60

type Controller struct {

//context data
Ctx  *context.Context
Data map[interface{}]interface{}

//route controller info
controllerName string
actionName     string
methodMapping  map[string]func() //method:routertree
gotofunc       string
AppController  interface{}

// template data
TplName        string
Layout         string
LayoutSections map[string]string // the key is the section name and the value is the template name
TplExt         string
EnableRender   bool

// xsrf data
_xsrfToken string
XSRFExpire int
EnableXSRF bool

// session
CruSession session.Store
}

这个结构体保存了作为 Controller的一些必要的信息,一些基础的字段看名字就比较好理解
在这里的 context.Context(B

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值