【Go + Nuxt.js 搭建一个 BBS 系统】3. 使用Iris搭建http服务
点击下面链接购买后可获取本课程完整源码,同时提供高大上的在线IDE开发环境,边看教程边动手。
- 购买地址:https://www.shiyanlou.com/courses/1436
- 购买九折优惠邀请码:
ZHwfIjb1
作者简介
大猫猫,互联网公司老码农、不折腾不舒服斯基,多年千万日活服务端研发和架构经验。关注公众号查看更多技术干货:
实验介绍
实验内容
本实验我们来认识一下Go语言Web框架Iris
,并使用它搭建一个Web服务。
知识点
- 认识Iris
- 使用Iris搭建Http服务
Iris简介
Iris
官网:https://iris-go.com
Iris
以简单而强大的 api 而闻名。Iris
同样擅长MVC
。Iris
是唯一一个拥有MVC
架构模式丰富支持的Go Web
框架,性能成本接近于零。Iris
为您提供构建面向服务的应用程序的结构,用Iris
构建微服务很容易。
Iris 作者如是说
Go
是一个很棒的技术堆栈,用于为Web
应用程序构建可扩展的,基于Web
的后端系统。
当您考虑构建Web
应用程序和Web API
,或者只是在Go
中构建HTTP
服务器时,您是否会想到标准的net/http
包? 然后,您必须处理一些常见情况,如动态路由(a.k.a参数化),安全性和身份验证,实时通信以及net/http
无法解决的许多其他问题。
net/http
包不够完整,无法快速构建设计良好的后端Web
系统。 当你意识到这一点时,你可能会想到这些方面:
好的,net/http
软件包不适合我,但有很多框架,哪一个对我有用?!
他们每个人都告诉我这是最好的。 我不知道该怎么办!
我用wrk
和ab
做了一些深入的研究和基准测试,以便选择适合我和我的新项目的框架。遗憾的是,结果对我来说真的很失望。
我开始想知道golang
在网上是不是像我读过的那样快……但是,在我让Golang
继续使用nodejs
开发之前,我告诉自己:
'Makis,不要失去希望,至少给
Golang
一个机会。尝试构建一些全新的东西,而不是基于你之前看到的“慢”代码; 了解这种语言的秘密,并让其他人按照你的步骤!'。
这些是我当天告诉自己的话[2016年3月13日]。
同一天晚上,我正在读一本关于希腊神话的书。 我看到了一个古老的女神的名字,并立即受到启发,为这个新的网络框架(我已经开始写作)命名 - Iris
。
两个月后,我正在写这篇介绍。
Go语言Web框架对比
Go语言比较注明的WEB
框架有gin、Iris、echo 等。这些框架都很优秀,我最终选择Iris
是因为他支持MVC
(可能由于我是一个Java程序员被MVC思想贯彻的比较彻底)。同样优秀的东西大家似乎都喜欢对比评测一番,我在晚上找了一份评测数据贴出来大家看下。这份数据看下就好,不要当真,真实性不好考证(因为iris和gin官方曾经撕逼过,他们都说自己是最快的)。
开始使用Iris
创建项目
上面我们介绍了Iris
下面来看下如何使用它。首先新建文件夹 GoBBS
进入该文件夹新建文件 main.go
,main.go
内容如下:
package main
// 入口 main 方法
func main() {
}
我们依赖由go mod
进行管理,接下来我们在GoBBS
文件夹下执行以下命令来初始化go mod
# github.com/mlogclub/GoBBS 为包名,根据自己的实际情况自定义
go mod init github.com/mlogclub/GoBBS
初始化完成之后会在项目根目录中生成一个go.mod
文件。
添加 iris 依赖
在项目根目录执行以下命令来添加iris依赖
go get github.com/kataras/iris@master
我们看下依赖添加之后的go.mod
文件,如下:
module github.com/mlogclub/GoBBS
go 1.13
require (
github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a // indirect
github.com/kataras/iris v0.0.0-20190916050704-df882273e219 // indirect
github.com/klauspost/compress v1.8.4 // indirect
github.com/klauspost/cpuid v1.2.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
)
可以看出 require
不仅添加了Iris
,还有一些其他的依赖,这些都是Iris
所需要的。
到这里我们就成功的创建了一个Iris
项目了,下面我们就可以愉快的使用Iris
了。
搭建http服务
接下来,我们修改main.go
文件,来启动一个简单的 http
服务。代码如下:
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/logger"
"github.com/kataras/iris/middleware/recover"
)
func main() {
app := iris.New()
app.Logger().SetLevel("debug")
// Optionally, add two built'n handlers
// that can recover from any http-relative panics
// and log the requests to the terminal.
app.Use(recover.New())
app.Use(logger.New())
// Method: GET
// Resource: http://localhost:8080/html
app.Handle("GET", "/html", func(ctx iris.Context) {
ctx.HTML("<h1>Hello Iris!</h1>")
})
// Method: GET
// Resource: http://localhost:8080/text
app.Get("/text", func(ctx iris.Context) {
ctx.WriteString("Hello Iris!")
})
// Method: GET
// Resource: http://localhost:8080/json
app.Get("/json", func(ctx iris.Context) {
ctx.JSON(iris.Map{"message": "Hello Iris!"})
})
// http://localhost:8080/html
// http://localhost:8080/text
// http://localhost:8080/json
app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}
完成以上代码之后执行以下命令来启动服务:
go run main.go
启动成功后控制台输出如下:
shiyanlou:project/ $ go run main.go
[DBUG] 2019/09/18 10:31 GET: / -> main.main.func1() and 2 more
[DBUG] 2019/09/18 10:31 GET: /ping -> main.main.func2() and 2 more
[DBUG] 2019/09/18 10:31 GET: /hello -> main.main.func3() and 2 more
[DBUG] 2019/09/18 10:31 Application: running using 1 host(s)
[DBUG] 2019/09/18 10:31 Host: addr is :8080
[DBUG] 2019/09/18 10:31 Host: virtual host is 0.0.0.0:8080
[DBUG] 2019/09/18 10:31 Host: register startup notifier
[DBUG] 2019/09/18 10:31 Host: register server shutdown on interrupt(CTRL+C/CMD+C)
[DBUG] 2019/09/18 10:31 Host: server will ignore the following errors: [http: Server closed]
Now listening on: http://0.0.0.0:8080Application started. Press CTRL+C to shut down.
然后在实验楼
环境中可以点击右侧Web服务进行预览,如下图:
从代码中我们可以看出,我们总共提供了以下三个接口:
接口一:/html
该接口返回的是html代码,请求之后返回结果如下:
<h1>Hello Iris!</h1>%
接口二:/text
该接口返回的是文本,请求之后返回结果如下:
Hello Iris!
接口三:/json
该接口返回的是json,请求之后返回结果如下
{"message":"Hello Iris!"}
总结
通过本实验,我们能创建一个基于Iris
的go项目,并能启动http服务,提供简单的接口。在接下来的实验中我们会继续深入了解Iris
。
文章转载请注明出处,原文链接:https://mlog.club/topic/645