1. 程式人生 > >Go實戰--也許最快的Go語言Web框架kataras/iris初識(basic認證、Markdown、YAML、Json)

Go實戰--也許最快的Go語言Web框架kataras/iris初識(basic認證、Markdown、YAML、Json)

生命不止,繼續 go go go !!!

接下來,想跟大家一起分享一些golang語言成熟的、知名度比較高的web框架。

我們從iris web框架開始,開始呢,我們先不去計較和比較誰的速度快,誰的效能好,讓我們先學習如何使用,積累到了一定程度後,再去進行測試各個框架的速度效能。

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簡介

Star: 7938

描述
關於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")) }

hello.html

<html>
<head>
    <title
>
Hello Page</title> </head> <body> <h1>
{{.message}}</h1> </body> </html>

basic認證

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)
}

Markdown

package main

import (
    "time"

    "github.com/kataras/iris"
    "github.com/kataras/iris/context"

    "github.com/kataras/iris/cache"
)

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](https://github.com/russross/blackfriday#sanitize-untrusted-content).

*   **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](https://github.com/kataras/iris) `)


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

    app.Get("/", cache.Handler(10*time.Second), writeMarkdown)
    app.Run(iris.Addr(":8080"))
}

func writeMarkdown(ctx context.Context) {
    println("Handler executed. Content refreshed.")
    ctx.Markdown(markdownContents)
}

YAML

DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8

main.go

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

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

這裡寫圖片描述