Go to file
thinkerou 3ac729dc4a
feat(gin): support http3 using quic-go/quic-go (#3210)
* experimental support http3

* remove go1.14 and go1.15

* update quic-go package path

* only support go1.19+

* remove go19 support

* update gomod

* chore: refine CI configuration and dependencies

- Remove dynamic Go versioning in favor of pinning to major version `1`
- Update linter version from `v1.56.2` to `v1.58.1` in GitHub Actions workflow

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* chore: refactor CI workflow and improve tests

- Update the golangci-lint-action version from `v5` to `v6` in the GitHub workflow configuration

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* chore: update dependencies and CI configurations

- Update Go version requirement from `1.20` to `1.21` in `go.mod`

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* style: refactor codebase and update tests

- Add an empty line in the import section of `gin.go`

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* chore: enhance code quality and consistency

- Add `gin.go` to the list of files with specific linters in `.golangci.yml`, applying the `gci` linter.

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

---------

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Co-authored-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2024-05-09 09:17:06 +08:00
.github feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
binding refactor(binding): use strings.Cut to replace strings.Index (#3522) 2024-05-08 06:28:15 +08:00
docs feat(binding): Support custom BindUnmarshaler for binding. (#3933) 2024-05-07 09:43:15 +08:00
examples Doc: fix gin example notice syntax (#1814) 2019-03-15 15:39:34 +08:00
ginS chore: upgrade golangci-lint and fix golangci-lint error (#3278) 2022-08-15 21:38:20 +08:00
internal ci: update Go version requirements and remove test files (#3957) 2024-05-08 10:14:42 +08:00
render chore(refactor): modify interface check way (#3855) 2024-03-06 22:27:21 +08:00
testdata chore: support min go version 1.18 (#3511) 2023-03-01 10:03:48 +08:00
.gitignore test(git): gitignore add develop tools (#3370) 2024-03-08 15:56:00 +08:00
.golangci.yml feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
.goreleaser.yaml chore: refactor configuration files for better readability (#3951) 2024-05-07 10:16:38 +08:00
auth_test.go feat(auth): add proxy-server authentication (#3877) 2024-03-11 22:22:58 +08:00
auth.go docs: Add document to constant AuthProxyUserKey and BasicAuthForProxy. (#3887) 2024-03-13 23:22:05 +08:00
AUTHORS.md add v1.8.0 changelog (#3160) 2022-05-30 15:16:10 +08:00
benchmarks_test.go chore: update go.mod and remove space from copyright (#3158) 2022-05-28 10:42:28 +08:00
BENCHMARKS.md chore: Deleted spaces (#2622) 2021-01-27 09:58:21 +08:00
CHANGELOG.md docs: update documentation and release notes for Gin v1.10.0 (#3953) 2024-05-07 12:50:01 +08:00
CODE_OF_CONDUCT.md docs(conduct): add code of conduct 2017-07-05 18:25:37 +02:00
codecov.yml build(codecov): Added a codecov configuration (#3891) 2024-03-21 21:13:56 +08:00
context_appengine.go chore: support min go version 1.18 (#3511) 2023-03-01 10:03:48 +08:00
context_test.go ci: update Go version requirements and remove test files (#3957) 2024-05-08 10:14:42 +08:00
context.go chore(optimize): the ShouldBindUri method of the Context struct (#3911) 2024-04-01 12:58:01 +08:00
CONTRIBUTING.md ci: add github action workflows (#2596) 2021-06-23 13:10:49 +08:00
debug_test.go ci: update Go version requirements and remove test files (#3957) 2024-05-08 10:14:42 +08:00
debug.go ci: update Go version requirements and remove test files (#3957) 2024-05-08 10:14:42 +08:00
deprecated_test.go chore: update go.mod and remove space from copyright (#3158) 2022-05-28 10:42:28 +08:00
deprecated.go docs(context): Added deprecation comments to BindWith (#3880) 2024-03-12 13:55:52 +08:00
doc.go chore: fix invalid link (#1820) 2019-03-20 12:07:34 +08:00
errors_test.go chore: upgrade golangci-lint and fix golangci-lint error (#3278) 2022-08-15 21:38:20 +08:00
errors.go fix: modify interface check way (#3327) 2022-10-20 00:49:19 +08:00
fs_test.go feat(fs): Export, test and document OnlyFilesFS (#3939) 2024-05-08 15:47:54 +08:00
fs.go feat(fs): Export, test and document OnlyFilesFS (#3939) 2024-05-08 15:47:54 +08:00
gin_integration_test.go feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
gin_test.go feat(binding): Support custom BindUnmarshaler for binding. (#3933) 2024-05-07 09:43:15 +08:00
gin.go feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
githubapi_test.go Replace bytes.Buffer with strings.Builder where appropriate (#3347) 2023-01-20 09:51:42 +08:00
go.mod feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
go.sum feat(gin): support http3 using quic-go/quic-go (#3210) 2024-05-09 09:17:06 +08:00
LICENSE Add MIT license 2014-06-30 16:54:02 -04:00
logger_test.go feat(logger): ability to skip logs based on user-defined logic (#3593) 2024-02-02 09:52:26 +08:00
logger.go feat(logger): ability to skip logs based on user-defined logic (#3593) 2024-02-02 09:52:26 +08:00
Makefile ci(Makefile): vet command add .PHONY (#3915) 2024-04-02 11:58:00 +08:00
middleware_test.go chore: upgrade golangci-lint and fix golangci-lint error (#3278) 2022-08-15 21:38:20 +08:00
mode_test.go fix(gin): data race warning for gin mode (#1580) 2024-05-08 09:13:36 +08:00
mode.go fix(gin): data race warning for gin mode (#1580) 2024-05-08 09:13:36 +08:00
path_test.go test(path): Optimize unit test execution results (#3883) 2024-03-14 11:22:54 +08:00
path.go chore: upgrade golangci-lint and fix golangci-lint error (#3278) 2022-08-15 21:38:20 +08:00
README.md chore: improve linting, testing, and GitHub Actions setup (#3583) 2023-04-26 14:13:56 +08:00
recovery_test.go Replace bytes.Buffer with strings.Builder where appropriate (#3347) 2023-01-20 09:51:42 +08:00
recovery.go chore: improve linting, testing, and GitHub Actions setup (#3583) 2023-04-26 14:13:56 +08:00
response_writer_test.go test(render): increased unit tests coverage (#3691) 2023-08-12 22:21:56 +08:00
response_writer.go add supprt for go1.20 http.rwUnwrapper to gin.responseWriter (#3489) 2023-02-12 13:01:43 +08:00
routergroup_test.go chore(router): match method added to routergroup for multiple HTTP methods supporting (#3464) 2023-02-06 15:46:42 +08:00
routergroup.go feat(fs): Export, test and document OnlyFilesFS (#3939) 2024-05-08 15:47:54 +08:00
routes_test.go docs: fix typo in comment (#3868) 2024-03-05 21:55:25 +08:00
test_helpers.go fix(engine): missing route params for CreateTestContext (#2778) (#2803) 2022-11-06 17:08:11 +08:00
tree_test.go fix(router): catch-all conflicting wildcard (#3812) 2024-02-04 21:14:29 +08:00
tree.go fix(router): catch-all conflicting wildcard (#3812) 2024-02-04 21:14:29 +08:00
utils_test.go chore: update go.mod and remove space from copyright (#3158) 2022-05-28 10:42:28 +08:00
utils.go chore: support min go version 1.18 (#3511) 2023-03-01 10:03:48 +08:00
version.go feat: update version constant to v1.10.0 (#3952) 2024-05-07 11:23:42 +08:00

Gin Web Framework

Build Status codecov Go Report Card GoDoc Sourcegraph Open Source Helpers Release TODOs

Gin is a web framework written in Go. It features a martini-like API with performance that is up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.

The key features of Gin are:

  • Zero allocation router
  • Fast
  • Middleware support
  • Crash-free
  • JSON validation
  • Routes grouping
  • Error management
  • Rendering built-in
  • Extendable

Getting started

Prerequisites

  • Go: any one of the three latest major releases (we test it with these).

Getting Gin

With Go module support, simply add the following import

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

to your code, and then go [build|run|test] will automatically fetch the necessary dependencies.

Otherwise, run the following Go command to install the gin package:

$ go get -u github.com/gin-gonic/gin

Running Gin

First you need to import Gin package for using Gin, one simplest example likes the follow example.go:

package main

import (
  "net/http"

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

func main() {
  r := gin.Default()
  r.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "pong",
    })
  })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

And use the Go command to run the demo:

# run example.go and visit 0.0.0.0:8080/ping on browser
$ go run example.go

Learn more examples

Quick Start

Learn and practice more examples, please read the Gin Quick Start which includes API examples and builds tag.

Examples

A number of ready-to-run examples demonstrating various use cases of Gin on the Gin examples repository.

Documentation

See API documentation and descriptions for package.

All documentation is available on the Gin website.

Articles about Gin

A curated list of awesome Gin framework.

Benchmarks

Gin uses a custom version of HttpRouter, see all benchmarks details.

Benchmark name (1) (2) (3) (4)
BenchmarkGin_GithubAll 43550 27364 ns/op 0 B/op 0 allocs/op
BenchmarkAce_GithubAll 40543 29670 ns/op 0 B/op 0 allocs/op
BenchmarkAero_GithubAll 57632 20648 ns/op 0 B/op 0 allocs/op
BenchmarkBear_GithubAll 9234 216179 ns/op 86448 B/op 943 allocs/op
BenchmarkBeego_GithubAll 7407 243496 ns/op 71456 B/op 609 allocs/op
BenchmarkBone_GithubAll 420 2922835 ns/op 720160 B/op 8620 allocs/op
BenchmarkChi_GithubAll 7620 238331 ns/op 87696 B/op 609 allocs/op
BenchmarkDenco_GithubAll 18355 64494 ns/op 20224 B/op 167 allocs/op
BenchmarkEcho_GithubAll 31251 38479 ns/op 0 B/op 0 allocs/op
BenchmarkGocraftWeb_GithubAll 4117 300062 ns/op 131656 B/op 1686 allocs/op
BenchmarkGoji_GithubAll 3274 416158 ns/op 56112 B/op 334 allocs/op
BenchmarkGojiv2_GithubAll 1402 870518 ns/op 352720 B/op 4321 allocs/op
BenchmarkGoJsonRest_GithubAll 2976 401507 ns/op 134371 B/op 2737 allocs/op
BenchmarkGoRestful_GithubAll 410 2913158 ns/op 910144 B/op 2938 allocs/op
BenchmarkGorillaMux_GithubAll 346 3384987 ns/op 251650 B/op 1994 allocs/op
BenchmarkGowwwRouter_GithubAll 10000 143025 ns/op 72144 B/op 501 allocs/op
BenchmarkHttpRouter_GithubAll 55938 21360 ns/op 0 B/op 0 allocs/op
BenchmarkHttpTreeMux_GithubAll 10000 153944 ns/op 65856 B/op 671 allocs/op
BenchmarkKocha_GithubAll 10000 106315 ns/op 23304 B/op 843 allocs/op
BenchmarkLARS_GithubAll 47779 25084 ns/op 0 B/op 0 allocs/op
BenchmarkMacaron_GithubAll 3266 371907 ns/op 149409 B/op 1624 allocs/op
BenchmarkMartini_GithubAll 331 3444706 ns/op 226551 B/op 2325 allocs/op
BenchmarkPat_GithubAll 273 4381818 ns/op 1483152 B/op 26963 allocs/op
BenchmarkPossum_GithubAll 10000 164367 ns/op 84448 B/op 609 allocs/op
BenchmarkR2router_GithubAll 10000 160220 ns/op 77328 B/op 979 allocs/op
BenchmarkRivet_GithubAll 14625 82453 ns/op 16272 B/op 167 allocs/op
BenchmarkTango_GithubAll 6255 279611 ns/op 63826 B/op 1618 allocs/op
BenchmarkTigerTonic_GithubAll 2008 687874 ns/op 193856 B/op 4474 allocs/op
BenchmarkTraffic_GithubAll 355 3478508 ns/op 820744 B/op 14114 allocs/op
BenchmarkVulcan_GithubAll 6885 193333 ns/op 19894 B/op 609 allocs/op
  • (1): Total Repetitions achieved in constant time, higher means more confident result
  • (2): Single Repetition Duration (ns/op), lower is better
  • (3): Heap Memory (B/op), lower is better
  • (4): Average Allocations per Repetition (allocs/op), lower is better

Middlewares

You can find many useful Gin middlewares at gin-contrib.

Users

Awesome project lists using Gin web framework.

  • gorush: A push notification server written in Go.
  • fnproject: The container native, cloud agnostic serverless platform.
  • photoprism: Personal photo management powered by Go and Google TensorFlow.
  • lura: Ultra performant API Gateway with middlewares.
  • picfit: An image resizing server written in Go.
  • dkron: Distributed, fault tolerant job scheduling system.

Contributing

Gin is the work of hundreds of contributors. We appreciate your help!

Please see CONTRIBUTING for details on submitting patches and the contribution workflow.