Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)

简介: ris自称是Go语言中所有Web框架最快的,它的特点如下:1.聚焦高性能 2.健壮的静态路由支持和通配符子域名支持。 3.

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/iris

Star: 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行,在浏览器输入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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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)
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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
  • 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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")))
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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"))
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

curl命令行执行:

curl -d '{"Name":"vSuperWang", "City":"beijing", "Other":"shit"}' -H "Content-Type: application/json" -X POST http://localhost:8080/bind_json
  • 1

这里写图片描述

目录
相关文章
|
28天前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
43 1
|
6月前
|
存储 JSON 安全
解锁互联网安全的新钥匙:JWT(JSON Web Token)
解锁互联网安全的新钥匙:JWT(JSON Web Token)
88 0
|
22天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
1月前
|
JSON 大数据 数据格式
web后端-json递归获取key值
web后端-json递归获取key值
|
6月前
|
JSON 编解码 安全
Golang 语言中怎么提升 JSON 编解码的性能?
Golang 语言中怎么提升 JSON 编解码的性能?
55 0
|
6月前
|
JSON Go 数据格式
Golang 语言中怎么解码 4 种常见JSON 格式数据?
Golang 语言中怎么解码 4 种常见JSON 格式数据?
33 0
|
3月前
|
存储 JSON 算法
为什么JSON Web Token对于应用程序中的会话管理很有用
为什么JSON Web Token对于应用程序中的会话管理很有用
|
3月前
|
JSON 安全 算法
JSON Web Token(缩写 JWT) 目前最流行、最常见的跨域认证解决方案
JSON Web Token(缩写 JWT) 目前最流行、最常见的跨域认证解决方案
156 0
|
3月前
|
JSON 开发框架 前端开发
动手实现基于 JSON 和 OData 两种数据模型的 Web 应用表格控件行项目的添加和删除
动手实现基于 JSON 和 OData 两种数据模型的 Web 应用表格控件行项目的添加和删除
29 0
|
4月前
|
存储 JSON 中间件
JWT json web token
JWT json web token
39 0

热门文章

最新文章