官方文档

Iris 简介

Iris 是一个拥有 MVC 架构模式的 Go Web 框架。

Iris 以简单而强大的api而闻名。 除了 Iris 为您提供的低级访问权限。

Iris 为您提供构建面向服务的应用程序的结构。 用 Iris 构建微服务很容易。

Iris 入门示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// main.go
package main

import (
    "github.com/kataras/iris"
    "strconv"
)

func init() {
    // // 管理员列表-免权限判断
    // Router.Get("managers", xxx.getAnswerAuth)

    // // 管理员权限判断示例代码
    // Router.Use(func(ctx iris.Context) {
    //     auth := ctx.Values().Get("user").(model.User)

    //     managers := repository.xxx.GetAnswerManagers()
    //     if _, ok := managers[auth.Id]; !ok {
    //         ctx.JSON(response.FailCode("您没有权限访问!", http.StatusBadRequest))
    //         return
    //     }

    //     ctx.Next()
    // })
}

func main() {
    app := iris.New()

    // 解决前端 AJAX 的 CORS 的跨域资源共享问题
    app.Use(func(ctx iris.Context) {
        ctx.Header("Access-Control-Allow-Origin", "*")
        ctx.Header("Access-Control-Allow-Credentials", "true")
        ctx.Header("Access-Control-Allow-Headers", "*")
        ctx.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, X-Access-Token,Token")
        ctx.Header("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if ctx.Method() == "OPTIONS" {
            ctx.StatusCode(http.StatusOK)
            return
        }

        ctx.Next()
    })

    // 解决预检问题
    app.AllowMethods(iris.MethodOptions)

    // 设置路由
    app.Get("/user/{id:uint32}", func(ctx iris.Context) {
        id := ctx.Params().GetUint32("id") // 获取动态路由参数
        ctx.StatusCode(200) // 设置 HTTP 状态码
        ctx.Header("c", "my custom header") // 设置 Header
        ctx.JSON(iris.Map{
            "message": "user id is" + strconv.FormatUint(uint64(id), 10),
        })
    })

    // listen and serve on http://0.0.0.0:8080.
    app.Run(iris.Addr(":8080"))
}
1
2
// 启动项目,在浏览器输入 http://localhost:8080,即可看到页面效果
go run main.go

Iris 的一些坑

  1. 使用『动态路由参数』校验参数时,前端访问后端接口会发生跨域问题

    提问问题链接

Iris 缺点

代码不够简洁,一个报错代码竟然要 3 行

1
2
3
4
5
if err != nil {
    ctx.StatusCode(http.StatusBadRequest)
    _, _ = ctx.JSON(response.Fail(err.Error()))
    return
}

学习资料

Iris 框架中文文档

Iris 学习笔记

iris-go 框架构建登陆 api 项目开发过程