erguotou

package module
v0.0.28 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2019 License: MIT Imports: 22 Imported by: 2

README

Erguotou Web Framework

erguotou 二锅头 基于fasthttp的轻量级web框架

中文文档

https://www.dollarkiller.com/erguotou/view/index.html

入门
贡献名单 (排名不分先后)
安装
go get github.com/dollarkillerx/erguotou
快速开始
package main

import "github.com/dollarkillerx/erguotou"

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

	// 注册全局中间件
	app.Use(erguotou.Logger)

	// 注册路由
	app.Get("/hello", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	err := app.Run(erguotou.SetHost(":8081"), erguotou.SetDebug(false))
	if err != nil {
		panic(err)
	}
}

Api示范

RestfulApi
func main() {
	app := erguotou.New()

	app.Get("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Post("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Delete("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Put("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Head("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Options("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	app.Patch("/", func(ctx *erguotou.Context) {
		ctx.String(200,"hello erguotou")
	})

	err := app.Run(erguotou.SetHost(":8081"), erguotou.SetDebug(false))
	if err != nil {
		panic(err)
	}
}
路径中参数
app.Get("/hello/:hello", func(ctx *erguotou.Context) {
    value, b := ctx.PathValueString("hello")
    if b {
        ctx.String(200,value)
    }
})
Get参数
app.Get("/hello", func(ctx *erguotou.Context) {
    val := ctx.GetVal("hello")

    ctx.Write(200,val)
})
POST参数
app.Post("/hello", func(ctx *erguotou.Context) {
    val := ctx.PostVal("hello")

    ctx.Write(200,val)
})
Body内容
app.Post("/hello", func(ctx *erguotou.Context) {
    body := ctx.Body()

    ctx.Write(200,body)
})
参数绑定
type user struct {
	Name string `json:"name" `
	Password string `json:"password" `
}

func TestBandJson(t *testing.T) {
	app := erguotou.New()

	data := user{}
	app.Post("/testjson", func(ctx *erguotou.Context) {
		value := ctx.BandValue(&data)
		if value != nil {
			panic(value)
		}

		ctx.Json(200,data)
	})

	app.Get("/testjson", func(ctx *erguotou.Context) {
		value := ctx.BandValue(&data)
		if value != nil {
			panic(value)
		}

		log.Println(data)
	})

	err := app.Run(erguotou.SetHost(":8082"))
	if err != nil {
		panic(err)
	}
}
上传文件
app.Get("/hello", func(ctx *erguotou.Context) {
    // FormFile 读取文件
    header, e := ctx.FormFile("file")
    if e != nil {
        ctx.String(400,"")
    }
    file, e := header.Open()
    if header != nil {
        defer file.Close()
    }

    bytes, e := ioutil.ReadAll(file)
    if e == nil {

        // SeedFile 发送文件
        ctx.SeedFileByte(bytes)
    }
})
路由分组
package main

import "github.com/dollarkillerx/erguotou"

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

	api := app.Group("/api")
	{
		api.Get("/hello", func(ctx *erguotou.Context) {
			ctx.String(200,"hello")
		})

		api.Get("/ppc", func(ctx *erguotou.Context) {
			ctx.String(200,"ppc")
		})
	}

	err := app.Run(erguotou.SetHost(":8082"))
	if err != nil {
		panic(err)
	}
}
使用中间件
engine := erguotou.New()

engine.Use(func(ctx *erguotou.Context) {
    log.Println("1")
    ctx.Next() // 执行下一级   反之不执行  哈哈哈
})

engine.Get("/hello/:name", func(ctx *erguotou.Context) {
    value, b := ctx.PathValue("name")
    if b {
        log.Println(value)
    }
    ctx.Next()
}, func(ctx *erguotou.Context) {
    ctx.String(200, "hello")
})
文件服务器
func TestFileServe(t *testing.T) {
	app := erguotou.New()

	app.Static("/hello",".")

	err := app.Run(erguotou.SetHost(":8082"))
	if err != nil {
		panic(err)
	}
}
HTML渲染
func main() {
	app := erguotou.New()

	app.Use(erguotou.Logger)

	// 注册html
	app.LoadHTMLPath("examples/html/view/**/*")

	app.Get("/", testhtml)

	app.Run(erguotou.SetHost(":8081"))
}


func testhtml(ctx *erguotou.Context) {

	ctx.Data("Ok","this is ok!")

	ctx.HTML(200,"/user/hello.html")
}
session
    engine.Get("/hello", func(ctx *erguotou.Context) {
		cache := session.GetSessionCache()
		cache.Set("name", "hello")
		cache.Set("ppc", "sdasd")
		cache.Save(ctx)
	})

	engine.Get("/ppc", func(ctx *erguotou.Context) {
		cache := session.GetSessionCache()
		get, b := cache.Get(ctx, "name")
		if b {
			log.Println(get)
		}
		get, b = cache.Get(ctx, "ppc")
		if b {
			log.Println(get)
		}
	})
性能测试
  • erguotou
➜  Test wrk -t12 -c400 -d30s http://0.0.0.0:8081/hello
Running 30s test @ http://0.0.0.0:8081/hello
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.69ms    1.03ms 117.82ms   97.54%
    Req/Sec     8.21k     4.53k   13.52k    68.48%
  2701628 requests in 30.10s, 349.44MB read
  Socket errors: connect 155, read 70, write 0, timeout 0
Requests/sec:  89752.96
Transfer/sec:     11.61MB
➜  Test wrk -t12 -c400 -d30s --latency http://0.0.0.0:8081/hello
Running 30s test @ http://0.0.0.0:8081/hello
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.89ms    1.90ms 126.43ms   96.70%
    Req/Sec     7.16k     4.39k   13.00k    46.44%
  Latency Distribution
     50%    2.73ms
     75%    2.96ms
     90%    3.35ms
     99%    8.07ms
  2571271 requests in 30.10s, 333.30MB read
  Socket errors: connect 155, read 74, write 0, timeout 0
Requests/sec:  85414.79
Transfer/sec:     11.07MB
  • gin
➜  Test wrk -t12 -c400 -d30s http://0.0.0.0:8082/hello
Running 30s test @ http://0.0.0.0:8082/hello
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     5.10ms   24.11ms   1.00s    99.49%
    Req/Sec     5.31k     3.64k   22.98k    48.79%
  1905011 requests in 30.10s, 218.01MB read
  Socket errors: connect 155, read 84, write 0, timeout 0
Requests/sec:  63282.30
Transfer/sec:      7.24MB
➜  Test wrk -t12 -c400 -d30s --latency http://0.0.0.0:8082/hello
Running 30s test @ http://0.0.0.0:8082/hello
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     5.24ms   26.01ms   1.02s    99.53%
    Req/Sec     5.32k     3.47k   12.66k    53.40%
  Latency Distribution
     50%    3.42ms
     75%    4.18ms
     90%    5.41ms
     99%   17.25ms
  1901550 requests in 30.07s, 217.62MB read
  Socket errors: connect 155, read 59, write 0, timeout 0
Requests/sec:  63238.53
Transfer/sec:      7.24MB
  • erguotou html
➜  Test wrk -t12 -c400 -d30s http://0.0.0.0:8081 
Running 30s test @ http://0.0.0.0:8081
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     3.81ms    5.23ms 137.54ms   93.37%
    Req/Sec     7.17k     4.02k   38.17k    64.16%
  2357265 requests in 30.10s, 544.44MB read
  Socket errors: connect 155, read 73, write 0, timeout 0
Requests/sec:  78310.06
Transfer/sec:     18.09MB
➜  Test wrk -t12 -c400 -d30s --latency http://0.0.0.0:8081
Running 30s test @ http://0.0.0.0:8081
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.19ms    5.94ms 148.89ms   94.66%
    Req/Sec     5.96k     3.51k   26.21k    54.90%
  Latency Distribution
     50%    2.88ms
     75%    3.55ms
     90%    5.44ms
     99%   34.73ms
  2138257 requests in 30.10s, 493.86MB read
  Socket errors: connect 155, read 25, write 0, timeout 0
Requests/sec:  71038.03
Transfer/sec:     16.41MB
  • gin html
➜  Test wrk -t12 -c400 -d30s http://0.0.0.0:8082      
Running 30s test @ http://0.0.0.0:8082
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    23.39ms   14.52ms 527.53ms   97.52%
    Req/Sec     0.87k   449.67     2.35k    61.40%
  309982 requests in 30.06s, 72.72MB read
  Socket errors: connect 155, read 187, write 0, timeout 0
Requests/sec:  10311.24
Transfer/sec:      2.42MB
➜  Test wrk -t12 -c400 -d30s --latency http://0.0.0.0:8082
Running 30s test @ http://0.0.0.0:8082
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.08ms   13.85ms 534.41ms   98.69%
    Req/Sec     0.92k   450.04     1.97k    53.33%
  Latency Distribution
     50%   21.20ms
     75%   22.91ms
     90%   24.87ms
     99%   36.05ms
  329183 requests in 30.05s, 77.23MB read
  Socket errors: connect 155, read 180, write 0, timeout 0
Requests/sec:  10955.90
Transfer/sec:      2.57MB
  • 测试环境
MacBook Pro (Retina, 15-inch, Mid 2015)
majave10.14.6
2.2 GHz Intel Core i7
16G DDR3 1600
测试代码详见examples test.md

报告案例

Running 30s test @ http://www.baidu.com (压测时间30s)
  12 threads and 400 connections (共12个测试线程,400个连接)
              (平均值) (标准差)  (最大值)(正负一个标准差所占比例)
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    (延迟)
    Latency   386.32ms  380.75ms   2.00s    86.66%
    (每秒请求数)
    Req/Sec    17.06     13.91   252.00     87.89%
  Latency Distribution (延迟分布)
     50%  218.31ms
     75%  520.60ms
     90%  955.08ms
     99%    1.93s 
  4922 requests in 30.06s, 73.86MB read (30.06s内处理了4922个请求,耗费流量73.86MB)
  Socket errors: connect 0, read 0, write 0, timeout 311 (发生错误数)
Requests/sec:    163.76 (QPS 163.76,即平均每秒处理请求数为163.76)
Transfer/sec:      2.46MB (平均每秒流量2.46MB)

Documentation

Overview

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

Index

Constants

This section is empty.

Variables

Functions

func HttpSplice

func HttpSplice(h1, h2 string) string

func Local added in v0.0.11

func Local(language string) func(ctx *Context)

func Logger

func Logger(ctx *Context)

Types

type Context

type Context struct {
	Ctx *fasthttp.RequestCtx // ctx
	// contains filtered or unexported fields
}

func (*Context) BindFrom added in v0.0.9

func (c *Context) BindFrom(obj interface{}) error

func (*Context) BindGet added in v0.0.22

func (c *Context) BindGet(obj interface{}) error

func (*Context) BindJson added in v0.0.9

func (c *Context) BindJson(obj interface{}) error

func (*Context) BindValue added in v0.0.9

func (c *Context) BindValue(obj interface{}) error

func (*Context) Body

func (c *Context) Body() []byte

获取body数据

func (*Context) Data added in v0.0.2

func (c *Context) Data(key string, data interface{})

func (*Context) FormFile

func (c *Context) FormFile(file string) (*multipart.FileHeader, error)

接受文件

func (*Context) GetCookie added in v0.0.10

func (c *Context) GetCookie(key string) string

func (*Context) GetVal

func (c *Context) GetVal(key string) []byte

获取get数据

func (*Context) HTML added in v0.0.2

func (c *Context) HTML(code int, tplName string) error

渲染 html

func (*Context) Header added in v0.0.27

func (c *Context) Header(key string) string

获取header

func (*Context) Json

func (c *Context) Json(code int, msg interface{}) (int, error)

返回json

func (*Context) Next

func (c *Context) Next()

来到下一级 调用链

func (*Context) PathValue

func (c *Context) PathValue(val string) (interface{}, bool)

获取path value

func (*Context) PathValueInt

func (c *Context) PathValueInt(val string) (int, bool)

获取参数path int

func (*Context) PathValueString

func (c *Context) PathValueString(val string) (string, bool)

获取参数path string

func (*Context) PostVal

func (c *Context) PostVal(key string) []byte

获取post数据

func (*Context) Redirect added in v0.0.10

func (c *Context) Redirect(code int, location string)

func (*Context) SeedFile

func (c *Context) SeedFile(path string)

返回文件

func (*Context) SeedFileByte

func (c *Context) SeedFileByte(file []byte)

返回文件bytes

func (*Context) SetCookie added in v0.0.10

func (c *Context) SetCookie(key string, val string)

func (*Context) SetCookieTime added in v0.0.17

func (c *Context) SetCookieTime(key, val string, ti time.Duration)

func (*Context) String

func (c *Context) String(code int, msg string) (int, error)

返回string

func (*Context) Write

func (c *Context) Write(code int, msg []byte) (int, error)

返回[]byte

type Engine

type Engine struct {
	Option Options
	RouterGroup

	Html *HtmlTemplate
	// contains filtered or unexported fields
}

func New

func New() *Engine

func (*Engine) Delims added in v0.0.21

func (e *Engine) Delims(left, right string)

func (*Engine) LoadHTMLGlob added in v0.0.21

func (e *Engine) LoadHTMLGlob(path string)

注册模板 ("templates/**/*"),funcMap // 这里的设计思路貌似错误了 不是一开始就激活 而是 view html才激活这里 写入html

func (*Engine) Run

func (e *Engine) Run(options ...Option) error

func (*Engine) SetFuncMap added in v0.0.21

func (e *Engine) SetFuncMap(funcMap template.FuncMap)

func (*Engine) Static added in v0.0.22

func (e *Engine) Static(path, dir string)

文件服务器

func (*Engine) Status

func (e *Engine) Status(path, dir string)

文件服务器

type H added in v0.0.22

type H map[string]interface{}

type HandlerFunc

type HandlerFunc func(ctx *Context)

处理函数

type HandlersChain

type HandlersChain []HandlerFunc

HandlersChain defines a HandlerFunc array.

type HtmlTemplate added in v0.0.21

type HtmlTemplate struct {
	FuncMap       template.FuncMap // func map
	Path          string           // path 路径
	HtmlPool      *ObjPool         // 对象池
	HtmlTemporary *sync.Pool       // 临时对象池
	// contains filtered or unexported fields
}

func NewHtmlTemplate added in v0.0.21

func NewHtmlTemplate(path string) *HtmlTemplate

func (*HtmlTemplate) LoadHTMLDebug added in v0.0.21

func (e *HtmlTemplate) LoadHTMLDebug() *template.Template

开发默认html热加载

func (*HtmlTemplate) SetDelims added in v0.0.21

func (h *HtmlTemplate) SetDelims(left, right string)

func (*HtmlTemplate) SetFuncMap added in v0.0.21

func (h *HtmlTemplate) SetFuncMap(funcMap template.FuncMap)

func (*HtmlTemplate) Show added in v0.0.21

func (h *HtmlTemplate) Show()

显示html

type ObjPool added in v0.0.9

type ObjPool struct {
	// contains filtered or unexported fields
}

对象池

func NewObjPoll added in v0.0.3

func NewObjPoll(obj PoolGenerateItem, num int) *ObjPool

创建对象池

func (*ObjPool) GetObj added in v0.0.9

func (p *ObjPool) GetObj(timeout time.Duration) (interface{}, error)

获取对象

func (*ObjPool) Release added in v0.0.9

func (p *ObjPool) Release(obj interface{}) error

放回对象

type Option

type Option func(*Options)

func SetDebug

func SetDebug(debug bool) Option

设置debug

func SetHost

func SetHost(host string) Option

设置host

func SetUploadSize added in v0.0.8

func SetUploadSize(size int) Option

设置上传大小

type Options

type Options struct {
	Host  string
	Size  int
	Debug bool
}

type PoolGenerateItem added in v0.0.3

type PoolGenerateItem func() interface{}

type RouterGroup

type RouterGroup struct {
	Handlers HandlersChain
	// contains filtered or unexported fields
}

内部路由器

func (*RouterGroup) Delete

func (r *RouterGroup) Delete(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Get

func (r *RouterGroup) Get(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Group

func (r *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup

注册组路由

func (*RouterGroup) Head

func (r *RouterGroup) Head(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Options

func (r *RouterGroup) Options(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Patch

func (r *RouterGroup) Patch(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Post

func (r *RouterGroup) Post(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Put

func (r *RouterGroup) Put(relativePath string, handlers ...HandlerFunc) *urlp

func (*RouterGroup) Use

func (r *RouterGroup) Use(middleware ...HandlerFunc)

注册全局中间件

type Utils added in v0.0.3

type Utils struct{}

func (*Utils) Get added in v0.0.3

func (u *Utils) Get(url string) ([]byte, error)

func (*Utils) PanicTrace added in v0.0.5

func (u *Utils) PanicTrace(kb int) []byte

打印堆栈信息

func (*Utils) Sha256Encode added in v0.0.11

func (u *Utils) Sha256Encode(str string) string

获取sha256

func (*Utils) SuperRand added in v0.0.11

func (u *Utils) SuperRand() string

Directories

Path Synopsis
* * @Author: DollarKiller * @Description: 内部高速缓存 * @Github: https://github.com/dollarkillerx * @Date: Create in 13:56 2019-10-29
* * @Author: DollarKiller * @Description: 内部高速缓存 * @Github: https://github.com/dollarkillerx * @Date: Create in 13:56 2019-10-29
examples
band_test
* * @Author: DollarKiller * @Description: 参数绑定 * @Github: https://github.com/dollarkillerx * @Date: Create in 21:45 2019-10-26
* * @Author: DollarKiller * @Description: 参数绑定 * @Github: https://github.com/dollarkillerx * @Date: Create in 21:45 2019-10-26
cache
* * @Author: DollarKiller * @Description: 高速缓存 * @Github: https://github.com/dollarkillerx * @Date: Create in 08:52 2019-10-30
* * @Author: DollarKiller * @Description: 高速缓存 * @Github: https://github.com/dollarkillerx * @Date: Create in 08:52 2019-10-30
cookie
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 14:35 2019-10-12
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 14:35 2019-10-12
get_parameter
* * @Author: DollarKiller * @Description: 获取git参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:10 2019-09-30
* * @Author: DollarKiller * @Description: 获取git参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:10 2019-09-30
group_router
* * @Author: DollarKiller * @Description: 路由分组 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:25 2019-09-30
* * @Author: DollarKiller * @Description: 路由分组 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:25 2019-09-30
html
* * @Author: DollarKiller * @Description: 渲染html * @Github: https://github.com/dollarkillerx * @Date: Create in 19:58 2019-10-02
* * @Author: DollarKiller * @Description: 渲染html * @Github: https://github.com/dollarkillerx * @Date: Create in 19:58 2019-10-02
json
* * @Author: DollarKiller * @Description: json test * @Github: https://github.com/dollarkillerx * @Date: Create in 19:07 2019-10-05
* * @Author: DollarKiller * @Description: json test * @Github: https://github.com/dollarkillerx * @Date: Create in 19:07 2019-10-05
locat_test
* * @Author: DollarKiller * @Description: 本地化测试 * @Github: https://github.com/dollarkillerx * @Date: Create in 15:05 2019-10-14
* * @Author: DollarKiller * @Description: 本地化测试 * @Github: https://github.com/dollarkillerx * @Date: Create in 15:05 2019-10-14
path_parameter
* * @Author: DollarKiller * @Description: 路径中参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:06 2019-09-30
* * @Author: DollarKiller * @Description: 路径中参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:06 2019-09-30
post_parameter
* * @Author: DollarKiller * @Description: 获取post参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:13 2019-09-30
* * @Author: DollarKiller * @Description: 获取post参数 * @Github: https://github.com/dollarkillerx * @Date: Create in 11:13 2019-09-30
restful_api
* * @Author: DollarKiller * @Description:restful api * @Github: https://github.com/dollarkillerx * @Date: Create in 11:02 2019-09-30
* * @Author: DollarKiller * @Description:restful api * @Github: https://github.com/dollarkillerx * @Date: Create in 11:02 2019-09-30
return
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 21:57 2019-10-26
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 21:57 2019-10-26
simple_demo
* * @Author: DollarKiller * @Description: 快速入门教程 * @Github: https://github.com/dollarkillerx * @Date: Create in 10:49 2019-09-30
* * @Author: DollarKiller * @Description: 快速入门教程 * @Github: https://github.com/dollarkillerx * @Date: Create in 10:49 2019-09-30
token
* * @Author: DollarKiller * @Description: token * @Github: https://github.com/dollarkillerx * @Date: Create in 09:01 2019-10-30
* * @Author: DollarKiller * @Description: token * @Github: https://github.com/dollarkillerx * @Date: Create in 09:01 2019-10-30
uploda_file
* * @Author: DollarKiller * @Description: upload file * @Github: https://github.com/dollarkillerx * @Date: Create in 11:18 2019-09-30
* * @Author: DollarKiller * @Description: upload file * @Github: https://github.com/dollarkillerx * @Date: Create in 11:18 2019-09-30
urlpath
* * @Author: DollarKiller * @Description: urlpath 反向解析 * @Github: https://github.com/dollarkillerx * @Date: Create in 13:00 2019-10-30
* * @Author: DollarKiller * @Description: urlpath 反向解析 * @Github: https://github.com/dollarkillerx * @Date: Create in 13:00 2019-10-30
validate
* * @Author: DollarKiller * @Description: validate * @Github: https://github.com/dollarkillerx * @Date: Create in 10:53 2019-10-30
* * @Author: DollarKiller * @Description: validate * @Github: https://github.com/dollarkillerx * @Date: Create in 10:53 2019-10-30
Code generated by go run bytesconv_table_gen.go; DO NOT EDIT.
Code generated by go run bytesconv_table_gen.go; DO NOT EDIT.
expvarhandler
Package expvarhandler provides fasthttp-compatible request handler serving expvars.
Package expvarhandler provides fasthttp-compatible request handler serving expvars.
fasthttpadaptor
Package fasthttpadaptor provides helper functions for converting net/http request handlers to fasthttp request handlers.
Package fasthttpadaptor provides helper functions for converting net/http request handlers to fasthttp request handlers.
fasthttputil
Package fasthttputil provides utility functions for fasthttp.
Package fasthttputil provides utility functions for fasthttp.
reuseport
Package reuseport provides TCP net.Listener with SO_REUSEPORT support.
Package reuseport provides TCP net.Listener with SO_REUSEPORT support.
stackless
Package stackless provides functionality that may save stack space for high number of concurrently running goroutines.
Package stackless provides functionality that may save stack space for high number of concurrently running goroutines.
* * @Author: DollarKiller * @Description: local 本地化 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:45 2019-10-14
* * @Author: DollarKiller * @Description: local 本地化 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:45 2019-10-14
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 18:48 2019-10-13 * * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 18:57 2019-10-13
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 18:48 2019-10-13 * * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 18:57 2019-10-13
test
validate
* * @Author: DollarKiller * @Description: validate test * @Github: https://github.com/dollarkillerx * @Date: Create in 10:37 2019-10-30
* * @Author: DollarKiller * @Description: validate test * @Github: https://github.com/dollarkillerx * @Date: Create in 10:37 2019-10-30
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 14:08 2019-10-29
* * @Author: DollarKiller * @Description: * @Github: https://github.com/dollarkillerx * @Date: Create in 14:08 2019-10-29
* * @Author: DollarKiller * @Description: str 压缩 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:30 2019-10-29 * * @Author: DollarKiller * @Description: 加密 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:19 2019-10-29 * * @Author: DollarKiller * @Description: 随机 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:24 2019-10-29
* * @Author: DollarKiller * @Description: str 压缩 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:30 2019-10-29 * * @Author: DollarKiller * @Description: 加密 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:19 2019-10-29 * * @Author: DollarKiller * @Description: 随机 * @Github: https://github.com/dollarkillerx * @Date: Create in 14:24 2019-10-29

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL