Skip to content

Latest commit

 

History

History
354 lines (229 loc) · 18.8 KB

HISTORY_ZH.md

File metadata and controls

354 lines (229 loc) · 18.8 KB

更新记录

想得到免费即时的支持?

https://github.com/kataras/iris/issues
https://chat.iris-go.com

获取历史版本?

https://github.com/kataras/iris/releases

我是否应该升级 Iris?

如果没有必要,不会强制升级。如果你已经准备好了,可以随时升级。

Iris 使用 Golang 的 vendor directory 特性, 避免依赖包的更改带来影响。

如何升级: 打开命令行执行以下命令: go get -u github.com/kataras/iris 或者等待自动更新。

2018 3月 24日 | v10.5.0 版本更新

新增

新增 缓存中间件客户端,更快的静态文件服务器. 详情 点击.

破坏式更新

改变 Value<T>Default(<T>, error)Value<T>Default(key, defaultValue) <T> 如同 ctx.PostValueIntDefault 或 ctx.Values().GetIntDefaultsessions/session#GetIntDefaultcontext#URLParamIntDefault. 由 @jefurry 提出 kataras#937.

如何升级现有代码

只需要移除第二个返回值即可.

示例: _examples/mvc/basic/main.go line 100  count,_ := c.Session.GetIntDefault("count", 1) 变更为: count := c.Session.GetIntDefault("count", 1).

请记住,如果您无法升级,那么就不要这样做,我们在此版本中没有任何安全修复程序,但在某些时候建议您最好进行升级,我们总是会添加您喜欢的新功能!

Su, 22 April 2018 | v10.6.0

This history entry is not translated yet to the Chinese language yet, please refer to the english version of the HISTORY entry instead.

2018 3月14日 | v10.4.0 版本更新

  • 修正 APIBuilder, Party#StaticWebAPIBuilder, Party#StaticEmbedded 子分组内的前缀错误
  • 保留 iris, core/router#StaticEmbeddedHandler 并移除 core/router/APIBuilder#StaticEmbeddedHandler, (Handler 后缀) 这是全局性的,与 Party APIBuilder 无关。
  • 修正 路径 {} 中的路径清理 (我们已经在 解释器 级别转义了这些字符, 但是一些符号仍然被更高级别的API构建器删除) , 例如 \\ 字符串的宏函数正则表达式内容 927 by commit e85b113476eeefffbc7823297cc63cd152ebddfd
  • 同步 golang.org/x/sys/unix

重要变更

我们使用新工具将静态文件的速度提高了8倍, https://github.com/kataras/bindata 这是 go-bindata 的一个分支,对我们来说,一些不必要的东西被移除了,并且包含一些提高性能的补充。

Reqs/sec 使用 shuLhan/go-bindata 和 备选方案对比

go-bindata

Reqs/sec 使用 kataras/bindata

bindata

新增 方法 Party#StaticEmbeddedGzipParty#StaticEmbedded 参数相同. 不同处在于 新增 StaticEmbeddedGzip 从 bindata 接收 GzipAsset 和 GzipAssetNames (go get -u github.com/kataras/bindata/cmd/bindata).

你可以在同个文件夹里同时使用 bindatago-bindata 工具, 第一个用于嵌入静态文件 (javascript, css, ...) 第二个用于静态编译模板!

完整示例: _examples/file-server/embedding-gziped-files-into-app/main.go.

2018 3月10号 | v10.3.0 版本更新

// NextOr 检查程序链上是否有下一个处理程序,如果是,则执行它
// 否则根据给定的处理程序设置分配给 Context 程序链,并且执行第一个控制器。
//
// 如果下一个处理器存在并执行,则返回true,否则返回false
//
// 请注意,如果没有找到下一个处理程序并且处理程序缺失,
// 会发送 (404) 状态码到客户端,并停止执行。
NextOr(handlers ...Handler) bool
// NextOrNotFound 检查程序链上是否存在下一个处理程序,如果有则执行
// 其他情况会发送 404 状态码,并停止执行。
//
// 如果下一个控制器存在并执行,返回 true , 其他情况 false.
NextOrNotFound() bool

2018 2月15号 | v10.2.1 版本更新

修正 子域名 (subdomain) 的 StaticEmbeddedStaticWeb 不存在错误, 由 @speedwheel 通过 facebook page's chat 反馈。

2018 2月8号 | v10.2.0 版本更新

新的小版本, 因为它包含一个 破坏性变动 和一个新功能 Party#Reset

Party#Done 特性变动 和 新增 Party#DoneGlobal 介绍

正如 @likakuli 指出的那样 kataras#901, 以前 Done 注册的处理器,在全局范围内会替代子处理器,因为在引入 UseGlobal 这概念之前,缺少稳定性. 现在是时候了, 新的 Done 应该在相关的路由之前调用, 新增 DoneGlobal 之前的Done 使用相同; 顺序无关紧要,他只是结束处理附加到当前的注册程序, 全局性的 (所有子域名,分组).

routing/writing-a-middleware 路由中间件示例更新, 列举了使用方式变化, 如果之前使用过 Iris ,并熟悉内置函数方法名称,请区分 DoneGlobal 和 Done 的不同.

Party#Reset

新增 Party#Reset() 函数,以便重置上级分组通过 UseDone 注册的处理方法, 没有什么特别之处,它只是清除当前分组实例的 middlewaredoneHandlers,详情参见 core/router#APIBuilder.

更新方法

只需要将现有的 .Done 替换为 .DoneGlobal 就可以了。

2018 2月6号 | v10.1.0 版本更新

新特性:

  • 多级域名跳转, 相关示例 here
  • 缓存中间件携带 304 状态码, 缓存期间的请求,服务器只响应状态, 相关示例 here
  • websocket/Connection#IsJoined(roomName string) 新增方法,检查用户是否加入房间。 未加入的连接不能发送消息,此检查是可选的.

详情:

2018 1月16号 | v10.0.2 版本更新

安全更新 | iris.AutoTLS

建议升级, 包含几天前修复了 letsencrypt.org 禁用 tls-sni 的问题,这导致几乎每个启用了 https 的 golang 服务器都无法正常工作,因此支持添加了 http-01 类型。 现在服务器会尝试所有可用的 letsencrypt 类型。

更多相关资讯:

2018 1月15号 | v10.0.1 版本更新

该版本暂未发现重大问题,但如果你使用 cache 包的话,这里有些更新或许正好解决某些问题。

新增捐助

  1. https://opencollective.com/cetin-basoz

新增翻译

  1. 中文版 README_ZH.md and HISTORY_ZH.md 由 @Zeno-Code 翻译 kataras#858
  2. 俄语版 README_RU.md 由 @merrydii 翻译 kataras#857
  3. 希腊版 README_GR.md and HISTORY_GR.md https://github.com/kataras/iris/commit/8c4e17c2a5433c36c148a51a945c4dc35fbe502a#diff-74b06c740d860f847e7b577ad58ddde0 and https://github.com/kataras/iris/commit/bb5a81c540b34eaf5c6c8e993f644a0e66a78fb8

新增示例

  1. MVC - Register Middleware

新增文章

  1. A Todo MVC Application using Iris and Vue.js
  2. A Hasura starter project with a ready to deploy Golang hello-world web app with IRIS

2018 元旦 | v10.0.0 版本发布

我们必须感谢 Mrs. Diana 帮我们绘制的漂亮 logo!

如果有设计相关的需求,你可以发邮件给他,或者通过 instagram 给他发信息。

在这个版本中,有许多内部优化改进,但只有两个重大变更和新增一个叫做 hero 的特性。

新版本有 75 + 的变更提交, 如果你需要升级 Iris 请仔细阅读本文档。 为什么版本 9 跳过了? 你猜...

Hero 特性

新增包 hero 可以绑定处理任何依赖 handlers 的对象或函数。Hero funcs 可以返回任何类型的值,并发送给客户端。

之前的绑定没有编辑器的支持, 新包 hero 为 Iris 带来真正的安全绑定。 Iris 会在服务器运行之前计算所有内容,所以它执行速度高,接近于原生性能。

下面你会看到我们为你准备的一些截图,以便于理解:

1. 路径参数 - 构建依赖

2. 服务 - 静态依赖

3. 请求之前 - 动态依赖

hero funcs 非常容易理解,当你用过之后 在也回不去了.

示例:

MVC

如果要使用 mvc ,必须先理解 hero 包,因为mvc在内部使用hero作为路由控制器的方法,同样的规则也适用于你的控制器的方法。

With this version you can register any controller's methods as routes manually, you can get a route based on a method name and change its Name (useful for reverse routing inside templates), you can use any dependencies registered from hero.Register or mvc.New(iris.Party).Register per mvc application or per-controller, you can still use BeginRequest and EndRequest, you can catch BeforeActivation(b mvc.BeforeActivation) to add dependencies per controller and AfterActivation(a mvc.AfterActivation) to make any post-validations, singleton controllers when no dynamic dependencies are used, Websocket controller, as simple as a websocket.Connection dependency and more...

示例:

如果你之前使用过 MVC ,请仔细阅读:MVC 包含一些破坏性的改进,但新的方式可以做更多,会让程序执行更快

请阅读我们为你准备的示例

如果你现在需要升级,请对比新旧版本示例的不同,便于理解。

NEW OLD
Hello world OLD Hello world
Session Controller OLD Session Controller
Overview - Plus Repository and Service layers OLD Overview - Plus Repository and Service layers
Login showcase - Plus Repository and Service layers OLD Login showcase - Plus Repository and Service layers
Singleton 新增
Websocket Controller 新增
Vue.js Todo MVC 新增

context#PostMaxMemory

移除旧版本的常量 context.DefaultMaxMemory 替换为配置 WithPostMaxMemory 方法.

// WithPostMaxMemory 设置客户端向服务器 post 提交数据的最大值
// 他不同于 request body 的值大小,如果有相关需求请使用
// `context#SetMaxRequestBodySize` 或者 `iris#LimitRequestBodySize`
//
// 默认值为 32MB 或者 32 << 20
func WithPostMaxMemory(limit int64) Configurator

如果你使用老版本的常量,你需要更改一行代码.

使用方式:

import "github.com/kataras/iris"

func main() {
    app := iris.New()
    // [...]

    app.Run(iris.Addr(":8080"), iris.WithPostMaxMemory(10 << 20))
}

context#UploadFormFiles

新方法可以多文件上传, 应用于常见的上传操作, 它是一个非常有用的函数。

// UploadFormFiles 将所有接收到的文件从客户端上传到系统物理位置 destDirectory。
//
// The second optional argument "before" gives caller the chance to
// modify the *miltipart.FileHeader before saving to the disk,
// it can be used to change a file's name based on the current request,
// all FileHeader's options can be changed. You can ignore it if
// you don't need to use this capability before saving a file to the disk.
//
// Note that it doesn't check if request body streamed.
//
// Returns the copied length as int64 and
// a not nil error if at least one new file
// can't be created due to the operating system's permissions or
// http.ErrMissingFile if no file received.
//
// If you want to receive & accept files and manage them manually you can use the `context#FormFile`
// instead and create a copy function that suits your needs, the below is for generic usage.
//
// The default form's memory maximum size is 32MB, it can be changed by the
//  `iris#WithPostMaxMemory` configurator at main configuration passed on `app.Run`'s second argument.
//
// See `FormFile` to a more controlled to receive a file.
func (ctx *context) UploadFormFiles(
        destDirectory string,
        before ...func(string, string),
    ) (int64, error)

这里是相关示例 here.

context#View

这里有个小更新,增加可选的第二个参数,用来绑定模版变量。提示:这种绑定方式,会忽略其他变量的绑定。 如果要忽略其他模版变量,之前是在 ViewData 上绑定一个空字符串,现在可以直接通过 View 方法添加。

func(ctx iris.Context) {
    ctx.ViewData("", myItem{Name: "iris" })
    ctx.View("item.html")
}

等同于:

func(ctx iris.Context) {
    ctx.View("item.html", myItem{Name: "iris" })
}
html 模版中调用: {{.Name}}

context#YAML

新增 context#YAML 函数, 解析结构体到 yaml。

//使用 yaml 包的 Marshal 的方法解析,并发送到客户端。
func YAML(v interface{}) (int, error)

Session#GetString

sessions/session#GetString 可以获取 session 的变量值(可以是 integer 类型),就像内存缓存、Context 上下文储存的值。