自顶向下浅析go-iris框架
自顶向下浅析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)、int
、long
、bool
、letter
、file
、path
示例: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
请求的工作流程如下:
- 初始化资源:主要是
Context
和APIBuilder
对象,Context
负责处理请求的请求信息和响应信息,APIBuilder
负责路由处理 - 处理
GET
请求:执行相应的中间件及业务逻辑控制器 - 释放资源:回收
Context
对象及释放其他资源
- 初始化资源:主要是
Request
&ResponseWriter
:Request
对应于原生的net/http.Request
,而ResponseWriter
则是封装了net/http.ResponseWriter
Context
&ContextPool
Context
:主要围绕Request
和Response
工作,用于获取请求包的各种信息及封装响应包信息ContextPool
:Context
池,目的是避免频繁创建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框架相关推荐
- spring框架 web开发_go语言web开发框架:Iris框架讲解(一)
Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...
- spring框架 web开发_go语言web开发框架学习:Iris框架讲解(一)
Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...
- go语言进行web开发之安装iris框架
go语言进行web开发之安装iris框架 对于安装iris框架,由于国内网络的限制造成了不小的困难,不仅网络速度很慢,而且有多个文件不能够通过go-get命令直接下载,我在安装iris框架的时候也花费 ...
- IRIS 框架学习一
IRIS 框架 1.介绍 用go语言开发web架构,速度最快的web框架. Iris是一款Go语言中用来开发web应用的框架,该框架支持编写一并在任何地方以最小的机器功率运行,如Android.ios ...
- IRIS框架ctx.header响应头设置不成功问题
IRIS框架ctx.header响应头设置 Go的iris框架在使用中感觉是功能非常强大的框架,功能很完善,且可以通过框架的api灵活的处理客户端发送的请求以及返回信息. 在一个项目中需要对返回客户端 ...
- GO语言 Iris框架下载安装测试指南 排除故障 非GoMod模式
因为在局域网下下载Iris框架可能会遇到一些困难 首先提供上Iris项目GitHub地址:https://github.com/kataras/iris 网络上提供 了许多下载方法 都是类似于go g ...
- “递归三要素”寻踪(浅析递归“经典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)
浅析递归"经典"框架,领略递归优雅秀气.看到有"递归算法优化"的操作,余试剖之. [学习的细节是欢悦的历程] Python 官网:https://www.pyt ...
- Iris框架的搭建与部署教程
项目介绍 一款 Go 语言基于Iris.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的 ...
- 饮水思源--浅析深度学习框架设计中的关键技术
点击上方"深度学习大讲堂"可订阅哦! 编者按:如果把深度学习比作一座城,框架则是这座城中的水路系统,而基于拓扑图的计算恰似城中水的流动,这种流动赋予了这座城以生命.一个优雅的框架在 ...
最新文章
- 把你手机里的照片秒变3D!Facebook训练了一个CNN端到端系统
- pads最新版本是多少_电路EDA软件究竟有多少?
- 全局事件-广播(Broadcast)
- C语言二级指针与典型应用(1)
- rabbitmq-5-案例1-简单的案例
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四
- MySQL子查询原理分析
- 一个程序,让你清楚区分二进制文件和文本文件
- 如何找出C#的dataGridView中某字段重复的行并将重复行标红(基于汉得MES系统)
- matlab仿真ssb调制解调,ssb调制解调原理
- 服务架构演变~超详细
- 虚拟桌面分屏_无需分屏软件!让一台主机为两台显示器分屏工作的方法
- 使用Template控制Editor显示方式
- python中的pygame弹球游戏代码_python pygame实现挡板弹球游戏
- 再见,仙剑之父!再见,姚壮宪!
- 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
- java毕业设计-大学生实习管理系统 实习申请系统【附源码+文档】
- 交叉编译Opencv带Contrib
- sparkstreaming之实时数据流计算实例
- 【技术】基于GPRS无线网络的嵌入式远程车载监测系统[图]
热门文章
- Linux的基本命令行操作(精简版)
- html期末作业代码网页设计——云南民族文化(8页) HTML+CSS+JavaScript html网页制作期末大作业成品_网页设计期末作业
- unity雪山场景+雪地素材包可以用于雪地雪山场景制作
- 灵魂之问:机器人编程学习的是什么?/机器人课与科学课/机器人课和编程课/乐高机器人学的是什么?
- TWaver最强大的ShapeNode功能
- mysql分页查询遇到order by发生的血案
- 2022年全球人工智能产业态势分析
- 关于word粘贴图片无法显示的原因
- 字符串的字串和子序列的区别
- LabVIEW 读取 tdms文件并存为csv