时间:2021-05-23
Iris介绍
编写一次并在任何地方以最小的机器功率运行,如Android、ios、Linux和Windows等。它支持Google Go,只需一个可执行的服务即可在所有平台。 Iris以简单而强大的api而闻名。 除了Iris为您提供的低级访问权限。 Iris同样擅长MVC。 它是唯一一个拥有MVC架构模式丰富支持的Go Web框架,性能成本接近于零。 Iris为您提供构建面向服务的应用程序的结构。 用Iris构建微服务很容易。
Golang常用框架有:Gin、Iris、Beego、Buffalo、Echo、Revel,其中Gin、Beego和Iris较为流行。Iris是目前流行Golang框架中唯一提供MVC支持(实际上Iris使用MVC性能会略有下降)的框架,并且支持依赖注入,使用入门简单,能够快速构建Web后端,也是目前几个框架中发展最快的,从2016年截止至目前总共有17.4k stars(Gin 35K stars)。
Iris is a fast, simple yet fully featured and very efficient web framework for Go. It provides a beautifully expressive and easy to use foundation for your next website or API.
Iris官网:https://iris-go.com/
Iris Github:https://github.com/kataras/iris
其他便捷设置方法:
// 默认设置日志和panic处理app := iris.Default()我们可以看到iris.Default()的源码:
// 注:默认设置"./view"为html view engine目录func Default() *Application { app := New() app.Use(recover.New()) app.Use(requestLogger.New()) app.defaultMode = true return app}上述例子使用的hello.html模板
<html><head> <title>Hello Page</title></head><body> <h1>{{ .message }}</h1></body></html>上述例子中路由处理,可以使用下面简单替换,分别针对HTTP中的各种方法
app.Get("/someGet", getting)app.Post("/somePost", posting)app.Put("/somePut", putting)app.Delete("/someDelete", deleting)app.Patch("/somePatch", patching)app.Head("/someHead", head)app.Options("/someOptions", options)例如,使用路由“/hello”的Get路径
app.Get("/hello", handlerHello)func handlerHello(ctx iris.Context) { ctx.WriteString("Hello")}// 等价于下面app.Get("/hello", func(ctx iris.Context) { ctx.WriteString("Hello") })整个Application使用文件记录
上述记录日志
// 获取当前时间now := time.Now().Format("20060102") + ".log"// 打开文件,如果不存在创建,如果存在追加文件尾,权限为:拥有者可读可写file, err := os.OpenFile(now, os.O_CREATE | os.O_APPEND, 0600)defer file.Close()if err != nil { app.Logger().Errorf("Log file not found")}// 设置日志输出为文件app.Logger().SetOutput(file)到文件可以和中间件结合,以控制不必要的调试信息记录到文件
func myMiddleware(ctx iris.Context) { now := time.Now().Format("20060102") + ".log" file, err := os.OpenFile(now, os.O_CREATE | os.O_APPEND, 0600) defer file.Close() if err != nil { ctx.Application().Logger().SetOutput(file).Errorf("Log file not found") os.Exit(-1) } ctx.Application().Logger().SetOutput(file).Infof("Runs before %s", ctx.Path()) ctx.Next()}上述方法只能打印Statuscode为200的路由请求,如果想要打印其他状态码请求,需要另使用
app.OnErrorCode(iris.StatusNotFound, func(ctx iris.Context) { now := time.Now().Format("20060102") + ".log" file, err := os.OpenFile(now, os.O_CREATE | os.O_APPEND, 0600) defer file.Close() if err != nil { ctx.Application().Logger().SetOutput(file).Errorf("Log file not found") os.Exit(-1) } ctx.Application().Logger().SetOutput(file).Infof("404") ctx.WriteString("404 not found")})Iris有十分强大的路由处理程序,你能够按照十分灵活的语法设置路由路径,并且如果没有涉及正则表达式,Iris会计算其需求预先编译索引,用十分小的性能消耗来完成路由处理。
注:ctx.Params()和ctx.Values()是不同的,下面是官网给出的解释:
Path parameter's values can be retrieved from ctx.Params()Context's local storage that can be used to communicate between handlers and middleware(s) can be stored to ctx.Values() .Iris可以使用的参数类型
Param Type Go Type Validation Retrieve Helper :string string anything (single path segment) Params().Get :int int -9223372036854775808 to 9223372036854775807 (x64) or -2147483648 to 2147483647 (x32), depends on the host arch Params().GetInt :int8 int8 -128 to 127 Params().GetInt8 :int16 int16 -32768 to 32767 Params().GetInt16 :int32 int32 -2147483648 to 2147483647 Params().GetInt32 :int64 int64 -9223372036854775808 to 92233720368?4775807 Params().GetInt64 :uint uint 0 to 18446744073709551615 (x64) or 0 to 4294967295 (x32), depends on the host arch Params().GetUint :uint8 uint8 0 to 255 Params().GetUint8 :uint16 uint16 0 to 65535 Params().GetUint16 :uint32 uint32 0 to 4294967295 Params().GetUint32 :uint64 uint64 0 to 18446744073709551615 Params().GetUint64 :bool bool “1” or “t” or “T” or “TRUE” or “true” or “True” or “0” or “f” or “F” or “FALSE” or “false” or “False” Params().GetBool :alphabetical string lowercase or uppercase letters Params().Get :file string lowercase or uppercase letters, numbers, underscore (_), dash (-), point (.) and no spaces or other special characters that are not valid for filenames Params().Get :path string anything, can be separated by slashes (path segments) but should be the last part of the route path Params().Get
在路径中使用参数
app.Get("/users/{id:uint64}", func(ctx iris.Context){ id := ctx.Params().GetUint64Default("id", 0)})使用post传递参数
app.Post("/login", func(ctx iris.Context) { username := ctx.FormValue("username") password := ctx.FormValue("password") ctx.JSON(iris.Map{ "Username": username, "Password": password, }) })以上就是Iris的基本入门使用,当然还有更多其他操作:中间件使用、正则表达式路由路径的使用、Cache、Cookie、Session、File Server、依赖注入、MVC等的用法,可以参照官方教程使用,后期有时间会写文章总结。
到此这篇关于详解Golang Iris框架的基本使用的文章就介绍到这了,更多相关Golang Iris框架使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
golang常用库:gorilla/mux-http路由库使用golang常用库:配置文件解析库-viper使用golang常用库:操作数据库的orm框架-go
golang常用库:gorilla/mux-http路由库使用golang常用库:配置文件解析库-viper使用golang常用库:操作数据库的orm框架-go
golang常用库:gorilla/mux-http路由库使用golang常用库:配置文件解析库-viper使用golang常用库:操作数据库的orm框架-go
GO1.7之后,新增了context.Context这个package,实现goroutine的管理。Context基本的用法参考GOLANG使用Context
Django框架models使用groupby详解:首先,看下列代码:UserData.objects.filter(hubid=sensorid,time__