自顶向下浅析go-iris框架

1. web框架的工作流程

2. go-iris框架简析

2.1 代码示例

构建web服务流程

基础示例

package mainimport ("github.com/kataras/iris/v12"
)func main() {app := iris.New()app.Get("/", indexHandler)app.Run(iris.Addr(":8080"))
}func indexHandler(ctx iris.Context) {ctx.WriteString("Hello, world!")
}

mvc示例

package mainimport ("github.com/kataras/iris/v12""github.com/kataras/iris/v12/mvc"
)func main() {app := iris.Default()movieParty := app.Party("/movies")mvc.New(movieParty).Handle(new(MovieController))app.Run(iris.Addr(":8080"))
}type MovieController struct {}// http://localhost:8080/movies
func (c *MovieController) Get() (movies []Movie) {for k, _ := range movieRepo {movies = append(movies, movieRepo[k])}return movies
}// http://localhost:8080/movies/name
func (c *MovieController) GetBy(name string) (movie Movie) {if _, ok := movieRepo[name]; ok {movie = movieRepo[name]}return movie
}type Movie struct {Name string `json:"name"`Type string `json:"type"`
}var movieRepo = make(map[string]Movie)func init() {movieRepo["MovieA"] = Movie{Name: "MovieA", Type: "Action"}movieRepo["MovieB"] = Movie{Name: "MovieB", Type: "Criminal"}movieRepo["MovieC"] = Movie{Name: "MovieC", Type: "Documentary"}
}

2.2 路由、控制器及中间件

目的:通过熟悉go-iris的路由、控制器及中间件,可以清楚开发过程中需要写哪些部分的代码,可以利用哪些已有组件进行功能实现

路由

路由示例

路由注册方式
  • 单路由

    • Application.Handle(method, path, handlers...)
    • Application.HTTPMethod(path, handlers...)
  • 分组路由
    • Application.Party(path, handlers...),分组路由对象
    • Application.PartyFunc(path, func(Context)),子路由树
路由参数类型与参数验证器
路由参数类型

参数类型string(default)、intlongboolletterfilepath
示例http://localhost:8080/movie/{movie_id:int}

参数验证器
  • 内置验证器

    • 数值、字符串验证器:min()/max(),校验数字的值,字符串的长度
    • 字符串验证器:prefix()suffix()contains()regexp()(正则匹配)
  • 自定义验证器:官方文档示例 iris_examples_dynamic_path

控制器与中间件

示例

控制器与中间件的定义
  • 控制器:即为HTTP请求的主处理程序,用于处理HTTP请求包中的数据,即用于实现业务逻辑,控制器通作为路由注册的对象之一,作为对应路由的主处理函数

  • 中间件:一个HTTP请求生命周期中的主处理程序mainHandler执行前后的运行的(自定义)函数或代码,也就是说中间件负责的是业务逻辑以外的处理。中间件也会在注册路由时与mainHandler一同注册,形成一个handler链路。

中间件的分类
  • 私有中间件:与mainHandler形成handler链路,使用Application.Handle(method, path, handlers...)Application.HTTPMethod(path, handlers...)
  • 分组中间件
    • 分组路由中间件:与mainHandler形成handler链路Application.Party(path, handlers...)Application.PartyFunc(path, handlers...)
    • 其他Application.Use() & Application.Done()
  • 全局中间件Application.UseGlobal(handlers...) & Application.DoneGlobal(handlers...)
  • 其他Application.UseOnce()
中间件的工作流程

2.3 iris关键对象类型及其组合关系

目的:通过熟源码悉go-iris的关键对象及其关系,可以进一步清楚iris是如何工作的

关键对象类型介绍

对象类型介绍

  • Application:一个iris-web服务中只有一个Application实例,用于管理整个web服务流程。Application处理一个HTTP请求的工作流程如下:

    • 初始化资源:主要是ContextAPIBuilder对象,Context负责处理请求的请求信息和响应信息,APIBuilder负责路由处理
    • 处理GET请求:执行相应的中间件及业务逻辑控制器
    • 释放资源:回收Context对象及释放其他资源
  • Request & ResponseWriterRequest对应于原生的net/http.Request,而ResponseWriter则是封装了net/http.ResponseWriter

  • Context & ContextPool

    • Context:主要围绕RequestResponse工作,用于获取请求包的各种信息及封装响应包信息
    • ContextPoolContext池,目的是避免频繁创建Context对象,保证性能
  • Router:基于Context和已注册的路由,通过执行mainHandler & Middleware负责处理接收的HTTP请求

  • APIBuilder:负责路由注册,注册内容为请求路径及其对应的handler,即mainHandler & Middleware

关键对象类型之间的组合关系

iris-web服务启动过程的对象创建及方法调用简析

代码示例

package mainimport ("github.com/kataras/iris/v12"
)func main() {app := iris.New()app.Get("/", indexHandler)app.Run(iris.Addr(":8080"))
}func indexHandler(ctx iris.Context) {ctx.WriteString("Hello, world!")
}

过程分析

3. Thanks

https://www.iris-go.com/docs/#/
https://learnku.com/docs/iris-go/10
https://www.cnblogs.com/leijiangtao/p/4162888.html
https://cloud.tencent.com/developer/article/1471117
https://juejin.cn/post/6844903896750489614

自顶向下浅析go-iris框架相关推荐

  1. spring框架 web开发_go语言web开发框架:Iris框架讲解(一)

    Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...

  2. spring框架 web开发_go语言web开发框架学习:Iris框架讲解(一)

    Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...

  3. go语言进行web开发之安装iris框架

    go语言进行web开发之安装iris框架 对于安装iris框架,由于国内网络的限制造成了不小的困难,不仅网络速度很慢,而且有多个文件不能够通过go-get命令直接下载,我在安装iris框架的时候也花费 ...

  4. IRIS 框架学习一

    IRIS 框架 1.介绍 用go语言开发web架构,速度最快的web框架. Iris是一款Go语言中用来开发web应用的框架,该框架支持编写一并在任何地方以最小的机器功率运行,如Android.ios ...

  5. IRIS框架ctx.header响应头设置不成功问题

    IRIS框架ctx.header响应头设置 Go的iris框架在使用中感觉是功能非常强大的框架,功能很完善,且可以通过框架的api灵活的处理客户端发送的请求以及返回信息. 在一个项目中需要对返回客户端 ...

  6. GO语言 Iris框架下载安装测试指南 排除故障 非GoMod模式

    因为在局域网下下载Iris框架可能会遇到一些困难 首先提供上Iris项目GitHub地址:https://github.com/kataras/iris 网络上提供 了许多下载方法 都是类似于go g ...

  7. “递归三要素”寻踪(浅析递归“经典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)

    浅析递归"经典"框架,领略递归优雅秀气.看到有"递归算法优化"的操作,余试剖之. [学习的细节是欢悦的历程] Python 官网:https://www.pyt ...

  8. Iris框架的搭建与部署教程

    项目介绍 一款 Go 语言基于Iris.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的 ...

  9. 饮水思源--浅析深度学习框架设计中的关键技术

    点击上方"深度学习大讲堂"可订阅哦! 编者按:如果把深度学习比作一座城,框架则是这座城中的水路系统,而基于拓扑图的计算恰似城中水的流动,这种流动赋予了这座城以生命.一个优雅的框架在 ...

最新文章

  1. 把你手机里的照片秒变3D!Facebook训练了一个CNN端到端系统
  2. pads最新版本是多少_电路EDA软件究竟有多少?
  3. 全局事件-广播(Broadcast)
  4. C语言二级指针与典型应用(1)
  5. rabbitmq-5-案例1-简单的案例
  6. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四
  7. MySQL子查询原理分析
  8. 一个程序,让你清楚区分二进制文件和文本文件
  9. 如何找出C#的dataGridView中某字段重复的行并将重复行标红(基于汉得MES系统)
  10. matlab仿真ssb调制解调,ssb调制解调原理
  11. 服务架构演变~超详细
  12. 虚拟桌面分屏_无需分屏软件!让一台主机为两台显示器分屏工作的方法
  13. 使用Template控制Editor显示方式
  14. python中的pygame弹球游戏代码_python pygame实现挡板弹球游戏
  15. 再见,仙剑之父!再见,姚壮宪!
  16. 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
  17. java毕业设计-大学生实习管理系统 实习申请系统【附源码+文档】
  18. 交叉编译Opencv带Contrib
  19. sparkstreaming之实时数据流计算实例
  20. 【技术】基于GPRS无线网络的嵌入式远程车载监测系统[图]

热门文章

  1. Linux的基本命令行操作(精简版)
  2. html期末作业代码网页设计——云南民族文化(8页) HTML+CSS+JavaScript html网页制作期末大作业成品_网页设计期末作业
  3. unity雪山场景+雪地素材包可以用于雪地雪山场景制作
  4. 灵魂之问:机器人编程学习的是什么?/机器人课与科学课/机器人课和编程课/乐高机器人学的是什么?
  5. TWaver最强大的ShapeNode功能
  6. mysql分页查询遇到order by发生的血案
  7. 2022年全球人工智能产业态势分析
  8. 关于word粘贴图片无法显示的原因
  9. 字符串的字串和子序列的区别
  10. LabVIEW 读取 tdms文件并存为csv