使用一个 vendor 工具,比如 Govendor

go get govendor

$ go get github.com/kardianos/govendor

创建你的项目目录并使用 cd 进入

$ mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_"

初始化你的项目的 Vendor 并添加 gin

$ govendor init
$ govendor fetch github.com/gin-gonic/gin@v1.2

复制一个开始模板到你的项目中

$ curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go

运行你的项目

$ go run main.go

依赖

现在 Gin 需要 Go 1.6 或更高版本,并且很快它将会需要 Go 1.7 。

快速开始

# 假设下面代码在 example.go 文件中
$ cat example.go
package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() // 在 0.0.0.0:8080 上监听并服务
}
# 运行 example.go 并在浏览器上访问 0.0.0.0:8080/ping
$ go run example.go

Benchmarks

Gin 采用一个 HttpRouter 的自定义版本

查看所有 Benchmarks

Benchmark name (1) (2) (3) (4) BenchmarkGin_GithubAll 30000 48375 0 0 BenchmarkAce_GithubAll 10000 134059 13792 167 BenchmarkBear_GithubAll 5000 534445 86448 943 BenchmarkBeego_GithubAll 3000 592444 74705 812 BenchmarkBone_GithubAll 200 6957308 698784 8453 BenchmarkDenco_GithubAll 10000 158819 20224 167 BenchmarkEcho_GithubAll 10000 154700 6496 203 BenchmarkGocraftWeb_GithubAll 3000 570806 131656 1686 BenchmarkGoji_GithubAll 2000 818034 56112 334 BenchmarkGojiv2_GithubAll 2000 1213973 274768 3712 BenchmarkGoJsonRest_GithubAll 2000 785796 134371 2737 BenchmarkGoRestful_GithubAll 300 5238188 689672 4519 BenchmarkGorillaMux_GithubAll 100 10257726 211840 2272 BenchmarkHttpRouter_GithubAll 20000 105414 13792 167 BenchmarkHttpTreeMux_GithubAll 10000 319934 65856 671 BenchmarkKocha_GithubAll 10000 209442 23304 843 BenchmarkLARS_GithubAll 20000 62565 0 0 BenchmarkMacaron_GithubAll 2000 1161270 204194 2000 BenchmarkMartini_GithubAll 200 9991713 226549 2325 BenchmarkPat_GithubAll 200 5590793 1499568 27435 BenchmarkPossum_GithubAll 10000 319768 84448 609 BenchmarkR2router_GithubAll 10000 305134 77328 979 BenchmarkRivet_GithubAll 10000 132134 16272 167 BenchmarkTango_GithubAll 3000 552754 63826 1618 BenchmarkTigerTonic_GithubAll 1000 1439483 239104 5374 BenchmarkTraffic_GithubAll 100 11383067 2659329 21848 BenchmarkVulcan_GithubAll 5000 394253 19894 609

(1): 在固定时间内重复完成的总数,数值越高的是越好的结果

(2): 单次重复持续时间(ns / op),越低越好

(3): 堆内存(B / op),越低越好

(4): 每次重复的平均分配(allocs / op),越低越好

Gin v1. stable

[x] 零分配路由

[x] 从路由到写入都是最快的 http 路由器和框架

[x] 完整的单元测试套件

[x] 经过实战考验

[x] API冻结,新版本不会破坏您的代码。

使用 jsoniter 构建

Gin 使用 encoding/json 作为默认的 json 包,但是你可以在构建的时候通过 tags 去使用 jsoniter 。

$ go build -tags=jsoniter .

API 示例