【Go + Nuxt.js 搭建一个 BBS 系统】3. 使用Iris搭建http服务

交流 Go语言分享 收藏
0 / 178

点击下面链接购买后可获取本课程完整源码,同时提供高大上的在线IDE开发环境,边看教程边动手。

作者简介

大猫猫,互联网公司老码农、不折腾不舒服斯基,多年千万日活服务端研发和架构经验。关注公众号查看更多技术干货:

码农俱乐部

实验介绍

实验内容

本实验我们来认识一下 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软件包不适合我,但有很多框架,哪一个对我有用?!

他们每个人都告诉我这是最好的。 我不知道该怎么办!

我用wrkab做了一些深入的研究和基准测试,以便选择适合我和我的新项目的框架。遗憾的是,结果对我来说真的很失望。

我开始想知道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.gomain.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