Iris是一个简单但功能齐全且非常高效的Go Web框架

Iris Web 框架


这是一个开发中的版本。敬请关注即将发布的版本 v12.2.0。如果想使用稳定版本,请查看 v12.1.8 分支

立即尝试官方的Iris命令行工具

Iris 是基于 Go 编写的一个快速,简单但功能齐全且非常高效的 Web 框架。 它为您的下一个网站或 API 提供了一个非常富有表现力且易于使用的基础。

测试对比

主要功能

  • 优化的路由器:极速 HTTP 路由器,无需动态内存分配
  • MVC 支持:一流的 MVC 模式支持
  • Websocket API:功能齐全的 Websocket 支持
  • 会话:内置会话处理
  • 依赖注入:强大的依赖注入容器
  • 身份验证:开箱即用地支持 OAuth、OAuth2 和 JWT
  • API 文档:自动生成的 Swagger/OpenAPI 文档
  • 中间件:丰富的中间件生态系统
  • 视图引擎:支持多种模板引擎
  • 高度可测试:构建时充分考虑测试

📖 开始学习 Iris

sh 复制代码
# 安装Iris:https://www.iris-go.com/#ebookDonateForm
$ go get github.com/kataras/iris/v12@latest
# 假设main.go文件中已存在以下代码
$ cat main.go
go 复制代码
package main

import "github.com/kataras/iris/v12"

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

	booksAPI := app.Party("/books")
	{
		booksAPI.Use(iris.Compression)

		// GET: http://localhost:8080/books
		booksAPI.Get("/", list)
		// POST: http://localhost:8080/books
		booksAPI.Post("/", create)
	}

	app.Listen(":8080")
}

// Book example.
type Book struct {
	Title string `json:"title"`
}

func list(ctx iris.Context) {
	books := []Book{
		{"Mastering Concurrency in Go"},
		{"Go Design Patterns"},
		{"Black Hat Go"},
	}

	ctx.JSON(books)
	// 提示: 在服务器优先级和客户端请求中进行响应协商,
	// 以此来代替 ctx.JSON:
	// ctx.Negotiation().JSON().MsgPack().Protobuf()
	// ctx.Negotiate(books)
}

func create(ctx iris.Context) {
	var b Book
	err := ctx.ReadJSON(&b)
	// 提示: 使用 ctx.ReadBody(&b) 代替,来绑定所有类型的入参
	if err != nil {
		ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
			Title("Book creation failure").DetailErr(err))
		// 提示: 如果仅有纯文本(plain text)错误响应,
        // 可使用 ctx.StopWithError(code, err) 
		return
	}

	println("Received Book: " + b.Title)

	ctx.StatusCode(iris.StatusCreated)
}

同样地,在MVC中 :

go 复制代码
import "github.com/kataras/iris/v12/mvc"
go 复制代码
m := mvc.New(booksAPI)
m.Handle(new(BookController))
go 复制代码
type BookController struct {
	/* dependencies */
}

// GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
	return []Book{
		{"Mastering Concurrency in Go"},
		{"Go Design Patterns"},
		{"Black Hat Go"},
	}
}

// POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
	println("Received Book: " + b.Title)

	return iris.StatusCreated
}

启动 您的 Iris web 服务:

sh 复制代码
$ go run main.go
> Now listening on: http://localhost:8080
> Application started. Press CTRL+C to shut down.

Books 列表查询 :

sh 复制代码
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books

[
  {
    "title": "Mastering Concurrency in Go"
  },
  {
    "title": "Go Design Patterns"
  },
  {
    "title": "Black Hat Go"
  }
]

创建 新的Book:

sh 复制代码
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Writing An Interpreter In Go\"}" \
http://localhost:8080/books

> HTTP/1.1 201 Created

这是错误响应所展示的样子:

sh 复制代码
$ curl -X POST --data "{\"title\" \"not valid one\"}" \
http://localhost:8080/books

> HTTP/1.1 400 Bad Request

{
  "status": 400,
  "title": "Book creation failure"
  "detail": "invalid character '\"' after object key",
}
run in the browser

Iris 有完整且详尽的 使用文档 ,让您可以轻松地使用此框架。

要了解更详细的技术文档,请访问我们的 godocs。如果想要寻找代码示例,您可以到仓库的 ./_examples 子目录下获取。

你喜欢在旅行时阅读吗?

Book cover

您可以获取PDF版本或在线访问电子图书,并参与到Iris的开发中。

🛡 安全漏洞

如果您发现在 Iris 存在安全漏洞,请发送电子邮件至 iris-go@outlook.com。所有安全漏洞将会得到及时解决。

📝 开源协议(License)

就像Go语言的协议一样,此项目也采用 BSD 3-clause license

项目名称 "Iris" 的灵感来自于希腊神话。

关于项目

Iris 是一个快速、简单但功能齐全且非常高效的 Go Web 框架。它为您的下一个网站或 API 提供了一个美观且易于使用的基础。
BSD-3-Clause
Golang
25,623
2468
666
2016-01-30
2025-11-20

增长趋势 - stars