ris自稱是Go語言中所有Web架構最快的,它的特點如下:
1.聚焦高性能
2.健壯的靜态路由支援和通配符子域名支援。
3.視圖系統支援超過5以上模闆
4.支援定制事件的高可擴充性Websocket API
5.帶有GC, 記憶體 & redis 提供支援的會話
6.友善的中間件和插件
7.完整 REST API
8.能定制 HTTP 錯誤
9.Typescript編譯器 + 基于浏覽器的編輯器
10.内容 negotiation & streaming
11.傳送層安全性
12.源碼改變後自動加載
13.OAuth, OAuth2 支援27+ API providers
14.JSON Web Tokens
kataras/iris簡介
github位址
https://github.com/kataras/irisStar: 7938
文檔位址
https://docs.iris-go.com/描述
關于kataras/iris的描述十分霸氣:
The fastest web framework for Go in (THIS) Earth. HTTP/2 Ready to GO. MVC when you need it.
還是那句話,暫時不去計較,隻是學習。
擷取
go get -u github.com/kataras/iris
快速開始
建立main.go
建立views檔案夾,在views中建立hello.html
main.go
package main
import "github.com/kataras/iris"
func main() {
app := iris.New()
app.RegisterView(iris.HTML("./views", ".html"))
app.Get("/", func(ctx iris.Context) {
ctx.ViewData("message", "Hello world!")
ctx.View("hello.html")
})
app.Run(iris.Addr(":8080"))
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
hello.html
<html>
<head>
<title>Hello Page</title>
</head>
<body>
<h1>{{.message}}</h1>
</body>
</html>
運作,在浏覽器輸入
http://localhost:8080/,得到運作結果。
basic認證
之前寫過關于basic認證的文章:
Go實戰–通過basic認證的http(basic authentication)package main
import (
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/middleware/basicauth"
)
func newApp() *iris.Application {
app := iris.New()
authConfig := basicauth.Config{
Users: map[string]string{"wangshubo": "wangshubo", "superWang": "superWang"},
Realm: "Authorization Required",
Expires: time.Duration(30) * time.Minute,
}
authentication := basicauth.New(authConfig)
app.Get("/", func(ctx context.Context) { ctx.Redirect("/admin") })
needAuth := app.Party("/admin", authentication)
{
//http://localhost:8080/admin
needAuth.Get("/", h)
// http://localhost:8080/admin/profile
needAuth.Get("/profile", h)
// http://localhost:8080/admin/settings
needAuth.Get("/settings", h)
}
return app
}
func main() {
app := newApp()
app.Run(iris.Addr(":8080"))
}
func h(ctx context.Context) {
username, password, _ := ctx.Request().BasicAuth()
ctx.Writef("%s %s:%s", ctx.Path(), username, password)
}
- 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
Markdown
Go實戰–golang中使用markdown(russross/blackfriday)package main
import (
"time"
<span class="hljs-string">"github.com/kataras/iris"</span>
<span class="hljs-string">"github.com/kataras/iris/context"</span>
<span class="hljs-string">"github.com/kataras/iris/cache"</span>
)
var markdownContents = []byte(`## Hello Markdown
This is a sample of Markdown contents
Features
All features of Sundown are supported, including:
-
Compatibility. The Markdown v1.0.3 test suite passes with
the –tidy option. Without –tidy, the differences are
mostly in whitespace and entity escaping, where blackfriday is
more consistent and cleaner.
-
Common extensions, including table support, fenced code
blocks, autolinks, strikethroughs, non-strict emphasis, etc.
-
Safety. Blackfriday is paranoid when parsing, making it safe
to feed untrusted user input without fear of bad things
happening. The test suite stress tests this and there are no
known inputs that make it crash. If you find one, please let me
know and send me the input that does it.
NOTE: “safety” in this context means runtime safety only. In order to
protect yourself against JavaScript injection in untrusted content, see
this example . -
Fast processing. It is fast enough to render on-demand in
most web applications without having to cache the output.
-
Routine safety. You can run multiple parsers in different
goroutines without ill effect. There is no dependence on global
shared state.
-
Minimal dependencies. Blackfriday only depends on standard
library packages in Go. The source code is pretty
self-contained, so it is easy to add to any project, including
Google App Engine projects.
-
Standards compliant. Output successfully validates using the
W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
this is a link `)
func main() {
app := iris.New()
app.Get(<span class="hljs-string">"/"</span>, cache.Handler<span class="hljs-number">(10</span>*time.Second), writeMarkdown)
app.Run(iris.Addr(<span class="hljs-string">":8080"</span>))
}
func writeMarkdown(ctx context.Context) {
println(“Handler executed. Content refreshed.”)
ctx.Markdown(markdownContents)
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
YAML
Go實戰–go語言中使用YAML配置檔案(與json、xml、ini對比)iris.yml
DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func main() {
app := iris.New()
app.Get("/", func(ctx context.Context) {
ctx.HTML("<b>Hello!</b>")
})
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.YAML("./iris.yml")))
}
Post Json
Go實戰–net/http中JSON的使用(The way to go)package main
import (
"fmt"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
type Company struct {
Name string
City string
Other string
}
func MyHandler(ctx context.Context) {
c := &Company{}
if err := ctx.ReadJSON(c); err != nil {
panic(err.Error())
} else {
fmt.Printf("Company: %#v", c)
ctx.Writef("Company: %#v", c)
}
}
func main() {
app := iris.New()
app.Post("/bind_json", MyHandler)
app.Run(iris.Addr(":8080"))
}
curl指令行執行:
curl -d '{"Name":"vSuperWang", "City":"beijing", "Other":"shit"}' -H "Content-Type: application/json" -X POST http://localhost:8080/bind_json