Go web 开发框架 Iris_张云飞VIR的博客-CSDN博客


本站和网页 https://blog.csdn.net/vir56k/article/details/105113354 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Go web 开发框架 Iris_张云飞VIR的博客-CSDN博客
Go web 开发框架 Iris
最新推荐文章于 2021-11-16 00:58:30 发布
张云飞VIR
最新推荐文章于 2021-11-16 00:58:30 发布
679
收藏
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vir56k/article/details/105113354
版权
背景
掌握了 Go 语言的基础后就该开始实践了,编写Web应用首先需要一个 web 开发框架。做框架选型时,处理web请求是基本功能,至于MVC是更进一步需要。现在比较流行的web架构是前后端分离,后端响应RESTful的请求,Iris 能满足我们的需要。
Iris简介
它是用Go编写的一个相当新的web框架。它是精心编写的最快的HTTP/2 web 框架。IRIS提供了相当优美的表达语法,和简单易用的框架支持你开发网站、API或分布式应用程序
简单来说Iris的特点:
语法简单小巧,轻量,快支持中间件(插件,请求拦截)支持 开发网站、API或分布式应用程序
本文结构:
开始吧
导入包
设定一些参数和启动:
响应 HTTP 中的各种方法(method): Get, Post, Put, Patch, Delete 和 Options
从 请求 中获得参数的值
从查询字符串( QueryString )中获得值
从表单(Form) 中获得值
上传文件
支持对路由的分组
中间件
写入日志到文件中
Cookie 操作
处理跨域CORS
开始吧
导入包
设定一些参数和启动:
开始吧
导入包
一些说明:
iris包: github.com/kataras/iris/v12iris的日志:github.com/kataras/iris/v12/middleware/logger能够在崩溃时记录和恢复:github.com/kataras/iris/v12/middleware/recover
代码示例: package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
设定一些参数和启动:
func main() {
app := iris.New()
app.Logger().SetLevel("debug")
// 可选的,recover 和logger 是内建的中间件,帮助在 崩溃时记录和恢复
app.Use(recover.New())
app.Use(logger.New())
// GET方法 返回一个 HTML
// 示例 URL : http://localhost:8080
app.Handle("GET", "/", func(ctx iris.Context) {
ctx.HTML("<h1>Welcome</h1>")
})
// GET方法 返回 字符串
// 示例 URL : http://localhost:8080/ping
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
// GET 方法 返回 JSON 格式的数据
// 示例 URL : http://localhost:8080/hello
app.Get("/hello", func(ctx iris.Context) {
ctx.JSON(iris.Map{"message": "Hello Iris!"})
})
// 启动
// http://localhost:8080
// http://localhost:8080/ping
// http://localhost:8080/hello
app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
上面演示了: GET 方法 返回一个 HTML,返回字符串,返回 JSON的情形。 代码很简单,一看就懂。
响应 HTTP 中的各种方法(method): Get, Post, Put, Patch, Delete 和 Options
func main() {
// Creates an application with default middleware:
// logger and recovery (crash-free) middleware.
app := iris.Default()
app.Get("/someGet", getting)
app.Post("/somePost", posting)
app.Put("/somePut", putting)
app.Delete("/someDelete", deleting)
app.Patch("/somePatch", patching)
app.Head("/someHead", head)
app.Options("/someOptions", options)
app.Run(iris.Addr(":8080"))
从 请求 中获得参数的值
app.Get("/users/{id:uint64}", func(ctx iris.Context){
id := ctx.Params().GetUint64Default("id", 0)
// [...]
})
从查询字符串( QueryString )中获得值
查询字符串 QueryString,是网址中的 键值对的格式。 比如这样格式: /welcome?firstname=Jane&lastname=Doe.
app.Get("/welcome", func(ctx iris.Context) {
// 下面这个是 ctx.Request().URL.Query().Get("lastname"). 的简单写法
// 读取值
lastname := ctx.URLParam("lastname")
// ,读取值支持默认值的方式
firstname := ctx.URLParamDefault("firstname", "Guest")
})
从表单(Form) 中获得值
通过POST发来的请求中有 “表单(Form) 数据”, 这样来获取
app.Post("/form_post", func(ctx iris.Context) {
message := ctx.FormValue("message")
nick := ctx.FormValueDefault("nick", "anonymous")
})
上传文件
设定 maxSize 控制 请求包的大小,和保存的文件名。
const maxSize = 5 << 20 // 5MB
func main() {
app := iris.Default()
app.Post("/upload", iris.LimitRequestBodySize(maxSize), func(ctx iris.Context) {
// 这里指示了 网址,和 beforeSave
ctx.UploadFormFiles("./uploads", beforeSave)
})
app.Run(iris.Addr(":8080"))
func beforeSave(ctx iris.Context, file *multipart.FileHeader) {
ip := ctx.RemoteAddr()
// 获取ip地址,转成字符串
ip = strings.Replace(ip, ".", "_", -1)
ip = strings.Replace(ip, ":", "_", -1)
// 这里处理了文件名
file.Filename = ip + "-" + file.Filename
支持对路由的分组
func main() {
app := iris.Default()
// Simple group: v1.
v1 := app.Party("/v1")
v1.Post("/login", loginEndpoint)
v1.Post("/submit", submitEndpoint)
v1.Post("/read", readEndpoint)
// Simple group: v2.
v2 := app.Party("/v2")
v2.Post("/login", loginEndpoint)
v2.Post("/submit", submitEndpoint)
v2.Post("/read", readEndpoint)
app.Run(iris.Addr(":8080"))
中间件
使用 app.Use() 函数来添加中间件
示例:
app := iris.New()
app.Use(recover.New())
日志中间件:
requestLogger := logger.New(logger.Config{
// Status displays status code
Status: true,
// IP displays request's remote address
IP: true,
// Method displays the http method
Method: true,
// Path displays the request path
Path: true,
// Query appends the url query to the Path.
Query: true,
// if !empty then its contents derives from `ctx.Values().Get("logger_message")
// will be added to the logs.
MessageContextKeys: []string{"logger_message"},
// if !empty then its contents derives from `ctx.GetHeader("User-Agent")
MessageHeaderKeys: []string{"User-Agent"},
})
app.Use(requestLogger)
为某个分组的 url 段添加中间件
// Authorization party /user.
// authorized := app.Party("/user", AuthRequired())
// exactly the same as:
authorized := app.Party("/user")
// per party middleware! in this case we use the custom created
// AuthRequired() middleware just in the "authorized" group/party.
authorized.Use(AuthRequired())
authorized.Post("/login", loginEndpoint)
authorized.Post("/submit", submitEndpoint)
authorized.Post("/read", readEndpoint)
// nested group: /user/testing
testing := authorized.Party("/testing")
testing.Get("/analytics", analyticsEndpoint)
写入日志到文件中
先准备一个 file 流
// Get a filename based on the date, just for the sugar.
func todayFilename() string {
today := time.Now().Format("Jan 02 2006")
return today + ".txt"
func newLogFile() *os.File {
filename := todayFilename()
// Open the file, this will append to the today's file if server restarted.
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
return f
调用 app.Logger().SetOutput 指向这个文件
f := newLogFile()
defer f.Close()
app := iris.New()
app.Logger().SetOutput(f)
Cookie 操作
ctx.SetCookieKV(name, value)
value := ctx.GetCookie(name)
ctx.RemoveCookie(name)
示例:
app.Get("/cookies/{name}/{value}", func(ctx iris.Context) {
name := ctx.Params().Get("name")
value := ctx.Params().Get("value")
ctx.SetCookieKV(name, value)
ctx.Writef("cookie added: %s = %s", name, value)
})
处理跨域CORS
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。 出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头。
跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。现代浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。
Iris 的一个社区框架可以帮助解决跨域问题,分几个步骤:
配置 crs 对象的参数,AllowedOrigins 参数设定服务器地址为你的 Party 加入允许。方法: app.Party("/api/v1", crs).AllowMethods(iris.MethodOptions)
代码示例:
package main
import (
"github.com/kataras/iris/v12"
"github.com/iris-contrib/middleware/cors"
func main() {
app := iris.New()
crs := cors.New(cors.Options{
AllowedOrigins: []string{"*"}, // 这里写允许的服务器地址,* 号标识任意
AllowCredentials: true,
})
v1 := app.Party("/api/v1", crs).AllowMethods(iris.MethodOptions) // <- important for the preflight.
v1.Get("/home", func(ctx iris.Context) {
ctx.WriteString("Hello from /home")
})
v1.Get("/about", func(ctx iris.Context) {
ctx.WriteString("Hello from /about")
})
v1.Post("/send", func(ctx iris.Context) {
ctx.WriteString("sent")
})
v1.Put("/send", func(ctx iris.Context) {
ctx.WriteString("updated")
})
v1.Delete("/send", func(ctx iris.Context) {
ctx.WriteString("deleted")
})
app.Run(iris.Addr("localhost:8080"))
详细见:https://github.com/iris-contrib/middleware/tree/master/cors
了解更多
更多请参考官方文档:https://iris-go.com/
官方GIT地址:https://github.com/kataras/iris
END
张云飞VIR
关注
关注
点赞
收藏
打赏
知道了
评论
Go web 开发框架 Iris
背景掌握了 Go 语言的基础后就该开始实践了,编写Web应用首先需要一个 web 开发框架。做框架选型时,处理web请求是基本功能,至于MVC是更进一步需要。现在比较流行的web架构是前后端分离,后端响应RESTful的请求,Iris 能满足我们的需要。Iris简介它是用Go编写的一个相当新的web框架。它是精心编写的最快的HTTP/2 web 框架。IRIS提供了相当优美...
复制链接
扫一扫
middleware:Iris Web 框架的社区中间件列表
05-29
Iris 社区中间件列表
该存储库提供了一种共享基于社区的中间件的方法。 其中,您还可以浏览 。
安装
安装一个中间件,以为例。
$ go env -w GOPROXY=goproxy.cn,gocenter.io,goproxy.io,direct
$ go mod init myapp
$ go get github.com/kataras/iris/v12@master
$ go get github.com/iris-contrib/middleware/jwt@master
导入为
import "github.com/iris-contrib/middleware/jwt"
// [...Code]
建造
$ go build
中间件只是一个链式处理程序,可以在主处理程序之前或之后执行,可以在处理程序之间传输数据并与第三方库进行通信,它们只是函数。
中间件
描述
拖拽传图 Iris + DropzoneJS
pardon110的博客
12-05
291
Iris官方其实很厚道,有很多有用的例子,而社区则是文档多于实战。源于官方示例库([英文源文])(https://github.com/kataras/iris/tree/master/_examples/tutorial/dropzonejs),本文采用 DropzoneJS and Go实现图片上传,后端裁剪,前端呈现,代码量少但胜在实用,适合新同学实战。
涉及的点
DropzoneJS...
参与评论
您还未登录,请先
登录
后发表或查看评论
go - iris - 构建类似Django的路由结构 ~ 路由组
weixin_44313745的博客
03-13
218
iris 的使用版本: v12
main.go
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"github.com/rs/cors"
func main() {
app := iris.New()
c := cors.New(cor
【GO+Iris】Iris框架初识
码农印象
11-16
3909
前言关于Iris安装IrisHostHTTP/2和安全任意iris.Runnerhost配置多个主机优雅的关闭带有TLS地自动公共域名app.Run的第二个参数使用配置自定义值从Context中访问配置Iris 进阶学习教程:
关于Iris
Iris是一个通过GO编写的快速的,简单的,但是功能齐全和非常有效率的web框架
Iris为你下一个网站或者API提供一个精美的、使用简单的基础
Iris为使用者提供了一个完整且体面地支持
安装Iris
Iris是一个跨平台的软件
//安装
//go get
Go 框架解析 -iris
一个北漂的程序猿
04-21
1616
文章目录前言安装iris的生命周期关键代码解析结语文献
前言
之前已经发过一篇过于beego的文章《golang框架解析-beego》,今天带来的是go框架iris的解析,主要讲解iris框架的一个生命周期过程。
在读这篇文章之前,如果没看过《golang框架解析-beego》的可以先去看看,因为《golang框架解析-beego》有讲关于go如何启动一个http server,这个知识点对理解本...
go之web框架 iris
热门推荐
无风的雨
06-08
2万+
前言
最近开始学习GO的WEB框架,IRIS号称是Go最快的后端Web框架,目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来。
所以先从它开始。
github地址
https://github.com/kataras/iris
文档
https://iris-go.com/
安装
go get -u github.com/kataras/iris
编辑main...
go - iris - 跨域
weixin_44313745的博客
03-13
664
ris 使用的版本 v12
文件目录结构
跨域问题的解决
main.go
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"github.com/rs/cors"
func main() {
app := iris.New()
【Golang】使用Iris
weixin_45922876的博客
07-28
502
官方文档:https://www.iris-go.com/docs
安装Iris
首先,创建一个项目文件夹——hello-server,在文件夹中输入以下命令。
E:\hello-server>go mod init hello-server
E:\hello-server>go get github.com/kataras/iris/v12@master
如果遇到网络错误,就输入以下命令。
E:\hello-server>go env -w GOPROXY=https://gopr.
Apache+PHP 解决上传文件大小限制的问题
郎涯技术
06-21
1万+
在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize
所上传的文件的最大大小。默认值2M。
2、php.ini:memory_limit
本 指令设定 了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可
golang实战开发之基础配置篇:拓展学习:iris框架介绍和使用技巧
no_reg的博客
01-24
910
Iris 是一款 Go 语言中用来开发 web 应用的框架,该框架支持编写一次并在任何地方以最小的机器功率运行,如 Android、ios、Linux 和 Windows 等。该框架只需要一个可执行的服务就可以在平台上运行了。
Iris以简单而强大的api而闻名。 除了Iris为您提供的低级访问权限。 Iris同样擅长MVC。 它是唯一一个拥有MVC架构模式丰富支持的Go Web框架,性能成本接近于零。
Iris为您提供构建面向服务的应用程序的结构。 用Iris构建微服务很容易。
在 iris 框架的官方网
Iris框架
01-20
Iris 是基于Go编写的一个快速,简单但功能齐全且非常高效的Web框架。它为您的下一个网站或 API 提供了一个非常富有表现力且易于使用的基础,可以很高效地用于后台开发。 Iris具有以下强大的特性: 专注于高性能 健壮...
iris:最快的HTTP2 Go Web框架。 AWS Lambda,gRPC,MVC,唯一路由器,Websocket,会话,测试套件,依赖注入等。 expressjs和laravel的真正继承者|谢谢https:github.comkatarasirisissues1329 |
02-03
Iris是一个用于Go的快速,简单但功能齐全且非常有效的Web框架。 它为您的下一个网站或API提供了精美表达和易于使用的基础。 简单处理程序package main import "github.com/kataras/iris/v12" type ( request ...
Iris Web Framework:Go最快的社区驱动的Web框架-开源
04-26
Iris是一个用Go语言编写的快速,功能齐全且具有未来派风格的Web框架。 它是迄今为止制作最快的HTTP / 2 Web框架,既高效又简单。 Iris为您的下一个网站,API或分布式应用程序提供了精美而易用的基础。 Iris附带了...
just:JUST-用于快速开发Web微服务的GoLang软件包
05-09
JUST Web框架 JUST —用Go(GoLang)编写的Web应用程序框架。 受到杜松子酒(GoLang)和Symfony(PHP)的启发。 创建JUST并不是为了处理海量数据和更抢先的类似物(Gin,Iris,Martini等)。 首先,我想获得舒适度...
go-iris-mvc:golang框架虹膜mvc
05-20
golang-iris-gorm-mvc-... Golang-Iris Web框架-Gorm ORM-MVC模型-Mysql数据库实际示例 git clone项目 将文件.example.env编辑为文件.env 进入name_project 去得到-u github.com/kataras/rizla 运行:rizla main.go
基础配置篇:博客的iris中间件配置
no_reg的博客
12-12
582
中间件的意思是,我们运行博客后,用户访问一个链接,程序会最终执行这个链接对应的控制器。在执行控制器里面的代码之前运行的其他代码,我们就叫做中间件。比如常用到的中间件有:authorization权限判断,logger访问日志,cors跨域处理options请求等。这些中间件有做拦截的,有做旁路的等等功能。
我们要制作的博客,同样需要使用到中间件功能,我们的博客设计中用到的功能有管理员权限判断、cors判断等。
cors跨域处理options请求
options叫做预检请求,就是查看是否可以或者允许跨域请求。
go语言web开发框架学习:Iris框架讲解(一)
qfliweimin的博客
04-21
921
Golang介绍
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。
谷歌资深软件工程师罗布·派克(Rob Pike)表示,“Go让我体验到了从未有过的开发效率。”派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快...
【Go语言Web开发框架】Iris快速入门
Karen_Cassiopeia的博客
01-07
509
Iris MVC 基本概念
Model(模型):应用程序的主体部分,主要包括业务逻辑,数据操作和数据模型
View(视图):用户与之交互的界面
Controller(控制器):接收来自界面的请求并交给模型进行处理
Iris MVC 工作流程
Iris MVC 目录结构
+ - - datamodels #所有模型存放目录
+ - - repositories #所有数据库操作结构体存放目录
+ - - services #所有逻辑
自顶向下浅析go-iris框架
bug生产者,code搬运工
12-20
550
浅析go-iris框架
1. web框架的工作流程
2. go-iris框架简析
2.1 代码示例
构建web服务流程
基础示例
package main
import (
"github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Get("/", indexHandler)
app.Run(iris.Addr(":8080"))
func indexHandler(ctx iri
go语言iris框架windows开发环境
最新发布
03-08
如何配置?
您可以在Windows上使用go语言iris框架进行开发,首先需要安装Go语言环境和Git,然后使用命令行工具安装iris框架。在安装完成后,您可以使用Visual Studio Code等编辑器进行开发,具体配置方法可以参考iris框架的官方文档。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
张云飞VIR
CSDN认证博客专家
CSDN认证企业博客
码龄17年
暂无认证
385
原创
3万+
周排名
8024
总排名
27万+
访问
等级
2775
积分
55
粉丝
68
获赞
52
评论
297
收藏
私信
关注
热门文章
放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
13529
Python使用pip install -r 一次安装多个模块
7626
android开发(15) 调用摄像头拍照,保存在照片到数据库。
6296
servlet 过滤器实现 请求转发(跳转);跨域转发请求;tomcat 环境下。
5849
Go 使用 Gorm 操作 MySQL 数据库
5637
分类专栏
团队管理
3篇
android
7篇
最新评论
使用 Docker 部署的微服务在 Nacos 里注册成内网地址 导致无法微服务间互相调用的解决方案...
Jodie大白话:
同问怎么解决呢
Spring Cloud 学习笔记(6) gateway 结合 JWT 实现身份认证
努力的阳光蓝孩:
AuthorizationFilter.Config 是个啥呀?看着一脸懵
Spring Cloud 学习笔记(6) gateway 结合 JWT 实现身份认证
努力的阳光蓝孩:
少了代码了吧?
使用 yum 安装 erlang
zhjiujiu:
官方yum配置出错
使用 Docker 部署的微服务在 Nacos 里注册成内网地址 导致无法微服务间互相调用的解决方案...
weixin_45605353:
同问怎么解决
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
使用 Luckysheet 可实现 Web 的 Excel
在Minio以STS方式获得临时凭据上传文件
使用geoserver-manager库操作geoserver发布图层
2023年2篇
2022年16篇
2021年90篇
2020年72篇
2019年29篇
2018年1篇
2017年1篇
2016年68篇
2015年111篇
目录
目录
分类专栏
团队管理
3篇
android
7篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
张云飞VIR
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值