README.md (8368B)
1 # Gin Web Framework 2 3 <img align="right" width="159px" src="https://raw.githubusercontent.com/gin-gonic/logo/master/color.png"> 4 5 [![Build Status](https://github.com/gin-gonic/gin/workflows/Run%20Tests/badge.svg?branch=master)](https://github.com/gin-gonic/gin/actions?query=branch%3Amaster) 6 [![codecov](https://codecov.io/gh/gin-gonic/gin/branch/master/graph/badge.svg)](https://codecov.io/gh/gin-gonic/gin) 7 [![Go Report Card](https://goreportcard.com/badge/github.com/gin-gonic/gin)](https://goreportcard.com/report/github.com/gin-gonic/gin) 8 [![GoDoc](https://pkg.go.dev/badge/github.com/gin-gonic/gin?status.svg)](https://pkg.go.dev/github.com/gin-gonic/gin?tab=doc) 9 [![Sourcegraph](https://sourcegraph.com/github.com/gin-gonic/gin/-/badge.svg)](https://sourcegraph.com/github.com/gin-gonic/gin?badge) 10 [![Open Source Helpers](https://www.codetriage.com/gin-gonic/gin/badges/users.svg)](https://www.codetriage.com/gin-gonic/gin) 11 [![Release](https://img.shields.io/github/release/gin-gonic/gin.svg?style=flat-square)](https://github.com/gin-gonic/gin/releases) 12 [![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/gin-gonic/gin)](https://www.tickgit.com/browse?repo=github.com/gin-gonic/gin) 13 14 Gin is a web framework written in [Go](https://go.dev/). It features a martini-like API with performance that is up to 40 times faster thanks to [httprouter](https://github.com/julienschmidt/httprouter). If you need performance and good productivity, you will love Gin. 15 16 **The key features of Gin are:** 17 18 - Zero allocation router 19 - Fast 20 - Middleware support 21 - Crash-free 22 - JSON validation 23 - Routes grouping 24 - Error management 25 - Rendering built-in 26 - Extendable 27 28 29 ## Getting started 30 31 ### Prerequisites 32 33 - **[Go](https://go.dev/)**: any one of the **three latest major** [releases](https://go.dev/doc/devel/release) (we test it with these). 34 35 ### Getting Gin 36 37 With [Go module](https://github.com/golang/go/wiki/Modules) support, simply add the following import 38 39 ``` 40 import "github.com/gin-gonic/gin" 41 ``` 42 43 to your code, and then `go [build|run|test]` will automatically fetch the necessary dependencies. 44 45 Otherwise, run the following Go command to install the `gin` package: 46 47 ```sh 48 $ go get -u github.com/gin-gonic/gin 49 ``` 50 51 ### Running Gin 52 53 First you need to import Gin package for using Gin, one simplest example likes the follow `example.go`: 54 55 ```go 56 package main 57 58 import ( 59 "net/http" 60 61 "github.com/gin-gonic/gin" 62 ) 63 64 func main() { 65 r := gin.Default() 66 r.GET("/ping", func(c *gin.Context) { 67 c.JSON(http.StatusOK, gin.H{ 68 "message": "pong", 69 }) 70 }) 71 r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080") 72 } 73 ``` 74 75 And use the Go command to run the demo: 76 77 ``` 78 # run example.go and visit 0.0.0.0:8080/ping on browser 79 $ go run example.go 80 ``` 81 82 ### Learn more examples 83 84 #### Quick Start 85 86 Learn and practice more examples, please read the [Gin Quick Start](docs/doc.md) which includes API examples and builds tag. 87 88 #### Examples 89 90 A number of ready-to-run examples demonstrating various use cases of Gin on the [Gin examples](https://github.com/gin-gonic/examples) repository. 91 92 93 ## Documentation 94 95 See [API documentation and descriptions](https://godoc.org/github.com/gin-gonic/gin) for package. 96 97 All documentation is available on the Gin website. 98 99 - [English](https://gin-gonic.com/docs/) 100 - [简体中文](https://gin-gonic.com/zh-cn/docs/) 101 - [繁體中文](https://gin-gonic.com/zh-tw/docs/) 102 - [日本語](https://gin-gonic.com/ja/docs/) 103 - [Español](https://gin-gonic.com/es/docs/) 104 - [한국어](https://gin-gonic.com/ko-kr/docs/) 105 - [Turkish](https://gin-gonic.com/tr/docs/) 106 - [Persian](https://gin-gonic.com/fa/docs/) 107 108 ### Articles about Gin 109 110 A curated list of awesome Gin framework. 111 112 - [Tutorial: Developing a RESTful API with Go and Gin](https://go.dev/doc/tutorial/web-service-gin) 113 114 ## Benchmarks 115 116 Gin uses a custom version of [HttpRouter](https://github.com/julienschmidt/httprouter), [see all benchmarks details](/BENCHMARKS.md). 117 118 | Benchmark name | (1) | (2) | (3) | (4) | 119 | ------------------------------ | ---------:| ---------------:| ------------:| ---------------:| 120 | BenchmarkGin_GithubAll | **43550** | **27364 ns/op** | **0 B/op** | **0 allocs/op** | 121 | BenchmarkAce_GithubAll | 40543 | 29670 ns/op | 0 B/op | 0 allocs/op | 122 | BenchmarkAero_GithubAll | 57632 | 20648 ns/op | 0 B/op | 0 allocs/op | 123 | BenchmarkBear_GithubAll | 9234 | 216179 ns/op | 86448 B/op | 943 allocs/op | 124 | BenchmarkBeego_GithubAll | 7407 | 243496 ns/op | 71456 B/op | 609 allocs/op | 125 | BenchmarkBone_GithubAll | 420 | 2922835 ns/op | 720160 B/op | 8620 allocs/op | 126 | BenchmarkChi_GithubAll | 7620 | 238331 ns/op | 87696 B/op | 609 allocs/op | 127 | BenchmarkDenco_GithubAll | 18355 | 64494 ns/op | 20224 B/op | 167 allocs/op | 128 | BenchmarkEcho_GithubAll | 31251 | 38479 ns/op | 0 B/op | 0 allocs/op | 129 | BenchmarkGocraftWeb_GithubAll | 4117 | 300062 ns/op | 131656 B/op | 1686 allocs/op | 130 | BenchmarkGoji_GithubAll | 3274 | 416158 ns/op | 56112 B/op | 334 allocs/op | 131 | BenchmarkGojiv2_GithubAll | 1402 | 870518 ns/op | 352720 B/op | 4321 allocs/op | 132 | BenchmarkGoJsonRest_GithubAll | 2976 | 401507 ns/op | 134371 B/op | 2737 allocs/op | 133 | BenchmarkGoRestful_GithubAll | 410 | 2913158 ns/op | 910144 B/op | 2938 allocs/op | 134 | BenchmarkGorillaMux_GithubAll | 346 | 3384987 ns/op | 251650 B/op | 1994 allocs/op | 135 | BenchmarkGowwwRouter_GithubAll | 10000 | 143025 ns/op | 72144 B/op | 501 allocs/op | 136 | BenchmarkHttpRouter_GithubAll | 55938 | 21360 ns/op | 0 B/op | 0 allocs/op | 137 | BenchmarkHttpTreeMux_GithubAll | 10000 | 153944 ns/op | 65856 B/op | 671 allocs/op | 138 | BenchmarkKocha_GithubAll | 10000 | 106315 ns/op | 23304 B/op | 843 allocs/op | 139 | BenchmarkLARS_GithubAll | 47779 | 25084 ns/op | 0 B/op | 0 allocs/op | 140 | BenchmarkMacaron_GithubAll | 3266 | 371907 ns/op | 149409 B/op | 1624 allocs/op | 141 | BenchmarkMartini_GithubAll | 331 | 3444706 ns/op | 226551 B/op | 2325 allocs/op | 142 | BenchmarkPat_GithubAll | 273 | 4381818 ns/op | 1483152 B/op | 26963 allocs/op | 143 | BenchmarkPossum_GithubAll | 10000 | 164367 ns/op | 84448 B/op | 609 allocs/op | 144 | BenchmarkR2router_GithubAll | 10000 | 160220 ns/op | 77328 B/op | 979 allocs/op | 145 | BenchmarkRivet_GithubAll | 14625 | 82453 ns/op | 16272 B/op | 167 allocs/op | 146 | BenchmarkTango_GithubAll | 6255 | 279611 ns/op | 63826 B/op | 1618 allocs/op | 147 | BenchmarkTigerTonic_GithubAll | 2008 | 687874 ns/op | 193856 B/op | 4474 allocs/op | 148 | BenchmarkTraffic_GithubAll | 355 | 3478508 ns/op | 820744 B/op | 14114 allocs/op | 149 | BenchmarkVulcan_GithubAll | 6885 | 193333 ns/op | 19894 B/op | 609 allocs/op | 150 151 - (1): Total Repetitions achieved in constant time, higher means more confident result 152 - (2): Single Repetition Duration (ns/op), lower is better 153 - (3): Heap Memory (B/op), lower is better 154 - (4): Average Allocations per Repetition (allocs/op), lower is better 155 156 157 ## Middlewares 158 159 You can find many useful Gin middlewares at [gin-contrib](https://github.com/gin-contrib). 160 161 162 ## Users 163 164 Awesome project lists using [Gin](https://github.com/gin-gonic/gin) web framework. 165 166 * [gorush](https://github.com/appleboy/gorush): A push notification server written in Go. 167 * [fnproject](https://github.com/fnproject/fn): The container native, cloud agnostic serverless platform. 168 * [photoprism](https://github.com/photoprism/photoprism): Personal photo management powered by Go and Google TensorFlow. 169 * [lura](https://github.com/luraproject/lura): Ultra performant API Gateway with middlewares. 170 * [picfit](https://github.com/thoas/picfit): An image resizing server written in Go. 171 * [dkron](https://github.com/distribworks/dkron): Distributed, fault tolerant job scheduling system. 172 173 174 ## Contributing 175 176 Gin is the work of hundreds of contributors. We appreciate your help! 177 178 Please see [CONTRIBUTING](CONTRIBUTING.md) for details on submitting patches and the contribution workflow.