Go iris 入门

文章目录

  • Go iris 入门
    • 1. Iris 框架
    • 2. 安装
    • 3. 示例程序
    • 4. 配置
    • 5. 路由
    • 6. Handler
    • 7. 错误处理

Go iris 入门

1. Iris 框架

  • Iris以简单而强大的api而闻名。 除了提供的低级访问权限, Iris同样擅长MVC。 它是唯一一个拥有MVC架构模式丰富支持的Go Web框架,性能成本接近于零。
  • Iris具有以下强大的特性,可以很高效地用于后台开发:
    • 专注于高性能
    • 简单流畅的API
    • 高扩展性
    • 强大的路由和中间件生态系统
    • 上下文
    • 身份验证
    • 视图系统.支持五种模板隐隐 完全兼容 html/template
    • Websocket库,其API类似于socket.io [如果你愿意,你仍然可以使用你最喜欢的]
    • 热重启

2. 安装

iris安装要求go版本至少为1.8,建议1.9

$ go get -u github.com/kataras/iris

3. 示例程序

安装完Iris,我们就可以跟着下面的简单示例运行我们的第一个web应用程序了:

//server.go

 package main
    import (
        "github.com/kataras/iris"
    )
    func main() {
        app := iris.New()
    
        //输出html
        // 请求方式: GET
        // 访问地址: http://localhost:8080/welcome
        app.Handle("GET", "/welcome", func(ctx iris.Context) {
            // ctx.HTML返回一个html页面,
            ctx.HTML("

Welcome

"
) }) //输出字符串 // 类似于 app.Handle("GET", "/ping", [...]) // 请求方式: GET // 请求地址: http://localhost:8080/ping app.Get("/ping", func(ctx iris.Context) { // ctx.WriteString将向请求方返回一个字符串 ctx.WriteString("pong") }) //输出json // 请求方式: GET // 请求地址: http://localhost:8080/hello app.Get("/hello", func(ctx iris.Context) { // ctx表示返回的结果,ctx.JSON即为返回一个json字符串 ctx.JSON(iris.Map{"message": "Hello Iris!"}) }) app.Run(iris.Addr(":8080"))//8080 监听端口 }

4. 配置

在前面的使用过程中,由于没有提供相关的配置,web程序启动之后将使用默认配置;但是,我们也可以根据自己的需要自定义配置,下面是一个配置的简单过程:

//config.go
package main
import (
    "github.com/kataras/iris"
)
func main() {
    app := iris.New()
    app.Get("/", func(ctx iris.Context) {
        ctx.HTML("Hello!")
    })
    // [...]
    //我们可以用这种方法单独定义我们的配置项
    app.Configure(iris.WithConfiguration(iris.Configuration{ DisableStartupLog:false}))
    //也可以使用app.run的第二个参数
    app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{
        DisableInterruptHandler:           false,
        DisablePathCorrection:             false,
        EnablePathEscape:                  false,
        FireMethodNotAllowed:              false,
        DisableBodyConsumptionOnUnmarshal: false,
        DisableAutoFireStatusCode:         false,
        TimeFormat:                        "Mon, 02 Jan 2006 15:04:05 GMT",
        Charset:                           "UTF-8",
    }))
    //通过多参数配置 但是上面两种方式是我们最推荐的
    // 我们使用With+配置项名称 如WithCharset("UTF-8") 其中就是With+ Charset的组合
    //app.Run(iris.Addr(":8080"), iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
    //当使用app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))设置配置项时
    //需要app.run()面前使用
}

5. 路由

为了使最终开发人员更容易,iris为所有HTTP方法提供了功能。第一个参数是路由的请求路径, 第二个可变参数应该包含一个或多个iris.Handler,当用户从服务器请求该特定的资源路径时,由注册顺序执行。

// 下面的方法将对GET请求进行监听,handler是一个iris.Handler的函数,可以包含一个或者多个,handler函数可以自定义
app.Get("/", handler)

分组路由 由路径前缀分组的一组路由可以(可选)共享相同的中间件处理程序和模板布局。一个组也可以有一个嵌套组。

Party 正在用于分组路由,开发人员可以声明无限数量的(嵌套)组。

下面是一个简单的例子,在Party部分将对/users 使用分组路由,可以看到,和前面相比,使用的是users.GET不是app.GET

app := iris.New()
//请在参数化路径部分
users := app.Party("/users", myAuthMiddlewareHandler)
// http://localhost:8080/users/42/profile
users.Get("/{id:int}/profile", userProfileHandler)
// http://localhost:8080/users/inbox/1
users.Get("/inbox/{id:int}", userMessageHandler)

6. Handler

handler 在iris中称为中间件,iris为所有HTTP方法提供了功能。第一个参数是路由的请求路径, 第二个可变参数应该包含一个或多个iris.Handler,Handler是在HTTP请求生命周期中在主处理程序代码之前和/或之后运行代码。例如,记录中间件可能会将传入的请求详细信息写入日志,然后在写入有关日志响应的详细信息之前调用处理程序代码。我们可以通过自定义handler来实现想要的功能。

下面是一个使用handler的简单示例:

在代码中使用了三个中间件,根据参数的顺序会依次执行:before, mainHandler, after

// handler.go
package main
import "github.com/kataras/iris"
func main() {
    app := iris.New()
    app.Get("/", before, mainHandler, after)
    app.Run(iris.Addr(":8080"))
}
func before(ctx iris.Context) {
    shareInformation := "this is a sharable information between handlers"

    requestPath := ctx.Path()
    println("Before the mainHandler: " + requestPath)

    ctx.Values().Set("info", shareInformation)
    ctx.Next() //继续执行下一个handler,在本例中是mainHandler。
}
func after(ctx iris.Context) {
    println("After the mainHandler")
}
func mainHandler(ctx iris.Context) {
    println("Inside mainHandler")
    // take the info from the "before" handler.
    info := ctx.Values().GetString("info")
    // write something to the client as a response.
    ctx.HTML("

Response

"
) ctx.HTML("
Info: "
+ info) ctx.Next() // 继续下一个handler 这里是after }

使用下面的命令运行程序,:

$ go run handler.go

会得到下面的输出:

Now listening on: http://localhost:8080
Application started. Press CTRL+C to shut down.
Before the mainHandler: /
Inside mainHandler
After the mainHandler

7. 错误处理

开发web应用程序一个经常遇到的情况就是请求错误处理,虽然go在请求错误的情况(如404未找到)会像正常情况一样返回结果,但是我们也可以自定义在发生特定的http错误代码时定义自己的处理程序。

错误代码是大于或等于400的http状态代码,如404未找到和500内部服务器。

下面是一个使用错误处理的简单示例:

package main
import "github.com/kataras/iris"
func main(){
    app := iris.New()
    app.OnErrorCode(iris.StatusNotFound, notFound)
    app.OnErrorCode(iris.StatusInternalServerError, internalServerError)
    // 注册一个处理函数处理HTTP错误codes >=400:
    // app.OnAnyErrorCode(handler)
    app.Get("/", index)
    app.Run(iris.Addr(":8080"))
}
func notFound(ctx iris.Context) {
    // 当http.status=400 时向客户端渲染模板$views_dir/errors/404.html
    ctx.View("errors/404.html")
}
//当出现错误的时候,再试一次
func internalServerError(ctx iris.Context) {
    ctx.WriteString("Oups something went wrong, try again")
}
func index(ctx context.Context) {
    ctx.View("index.html")
}

你可能感兴趣的:(学习笔记)