gin框架

小编 2026-07-05 阅读:351 评论:0
gin简介 gin是用Go语言写的后端web框架,简洁、轻量、支持高并发, 官方网站:https://gin-gonic.github.io/gin/ Github地址:https://git...

gin简介

gin是用Go语言写的后端web框架,简洁、轻量、支持高并发,
官方网站:https://gin-gonic.github.io/gin/
Github地址:https://github.com/gin-gonic/gin

下载

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

源码结构如下

sszxr:gin sszxr$ pwd
/Users/sszxr/go/src/github.com/gin-gonic/gin
sszxr:gin sszxr$ tree
.
├── AUTHORS.md
├── BENCHMARKS.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── auth.go
├── auth_test.go
├── benchmarks_test.go
├── binding
│   ├── binding.go
│   ├── binding_body_test.go
│   ├── binding_test.go
│   ├── default_validator.go
│   ├── form.go
│   ├── form_mapping.go
│   ├── json.go
│   ├── msgpack.go
│   ├── protobuf.go
│   ├── query.go
│   ├── uri.go
│   ├── validate_test.go
│   ├── xml.go
│   └── yaml.go
├── codecov.yml
├── context.go
├── context_17.go
├── context_17_test.go
├── context_appengine.go
├── context_pre17.go
├── context_test.go
├── debug.go
├── debug_test.go
├── deprecated.go
├── deprecated_test.go
├── doc.go
├── docs
│   └── how-to-build-an-effective-middleware.md
├── errors.go
├── errors_test.go
├── examples
│   ├── app-engine
│   │   ├── README.md
│   │   ├── app.yaml
│   │   └── hello.go
│   ├── assets-in-binary
│   │   ├── README.md
│   │   ├── assets.go
│   │   ├── html
│   │   │   ├── bar.tmpl
│   │   │   └── index.tmpl
│   │   └── main.go
│   ├── auto-tls
│   │   ├── example1
│   │   │   └── main.go
│   │   └── example2
│   │       └── main.go
│   ├── basic
│   │   ├── main.go
│   │   └── main_test.go
│   ├── custom-validation
│   │   └── server.go
│   ├── favicon
│   │   ├── favicon.ico
│   │   └── main.go
│   ├── graceful-shutdown
│   │   ├── close
│   │   │   └── server.go
│   │   └── graceful-shutdown
│   │       └── server.go
│   ├── grpc
│   │   ├── README.md
│   │   ├── gin
│   │   │   └── main.go
│   │   ├── grpc
│   │   │   └── server.go
│   │   └── pb
│   │       ├── helloworld.pb.go
│   │       └── helloworld.proto
│   ├── http-pusher
│   │   ├── assets
│   │   │   └── app.js
│   │   ├── main.go
│   │   └── testdata
│   │       ├── ca.pem
│   │       ├── server.key
│   │       └── server.pem
│   ├── http2
│   │   ├── README.md
│   │   ├── main.go
│   │   └── testdata
│   │       ├── ca.pem
│   │       ├── server.key
│   │       └── server.pem
│   ├── multiple-service
│   │   └── main.go
│   ├── realtime-advanced
│   │   ├── Makefile
│   │   ├── main.go
│   │   ├── resources
│   │   │   ├── room_login.templ.html
│   │   │   └── static
│   │   │       ├── epoch.min.css
│   │   │       ├── epoch.min.js
│   │   │       ├── prismjs.min.css
│   │   │       ├── prismjs.min.js
│   │   │       └── realtime.js
│   │   ├── rooms.go
│   │   ├── routes.go
│   │   └── stats.go
│   ├── realtime-chat
│   │   ├── Makefile
│   │   ├── main.go
│   │   ├── rooms.go
│   │   └── template.go
│   ├── struct-lvl-validations
│   │   ├── README.md
│   │   └── server.go
│   ├── template
│   │   └── main.go
│   └── upload-file
│       ├── multiple
│       │   ├── main.go
│       │   └── public
│       │       └── index.html
│       └── single
│           ├── main.go
│           └── public
│               └── index.html
├── fs.go
├── gin.go
├── ginS
│   ├── README.md
│   └── gins.go
├── gin_integration_test.go
├── gin_test.go
├── githubapi_test.go
├── go.mod
├── go.sum
├── internal
│   └── json
│       ├── json.go
│       └── jsoniter.go
├── logger.go
├── logger_test.go
├── middleware_test.go
├── mode.go
├── mode_test.go
├── path.go
├── path_test.go
├── recovery.go
├── recovery_test.go
├── render
│   ├── data.go
│   ├── html.go
│   ├── json.go
│   ├── json_17.go
│   ├── msgpack.go
│   ├── protobuf.go
│   ├── reader.go
│   ├── redirect.go
│   ├── render.go
│   ├── render_17_test.go
│   ├── render_test.go
│   ├── text.go
│   ├── xml.go
│   └── yaml.go
├── response_writer.go
├── response_writer_1.7.go
├── response_writer_1.8.go
├── response_writer_test.go
├── routergroup.go
├── routergroup_test.go
├── routes_test.go
├── test_helpers.go
├── testdata
│   ├── certificate
│   │   ├── cert.pem
│   │   └── key.pem
│   ├── protoexample
│   │   ├── test.pb.go
│   │   └── test.proto
│   └── template
│       ├── hello.tmpl
│       └── raw.tmpl
├── tools.go
├── tree.go
├── tree_test.go
├── utils.go
├── utils_test.go
├── vendor
│   └── vendor.json
└── version.go

45 directories, 150 files
sszxr:gin sszxr$ find . -name \'*.go\' | wc -l
     104
sszxr:gin sszxr$ 

源码并不多,总共104个go文件,主要代码在【gin.gocontext.go】这两个go文件中,所以阅读源码首先从这两个go文件入手。
示例用法在【examples】文件夹下,具体怎么用,可以看该文件夹下的用法示例。

三种模式

gin有三种模式,分别为:调试模式,发布模式,测试模式

const (
	// DebugMode indicates gin mode is debug.
	DebugMode = \"debug\"
	// ReleaseMode indicates gin mode is release.
	ReleaseMode = \"release\"
	// TestMode indicates gin mode is test.
	TestMode = \"test\"
)
const (
	debugCode = iota
	releaseCode
	testCode
)

默认是【debug】模式

package main

import (
	\"github.com/gin-gonic/gin\"
)

func main() {
	engine := gin.Default()
	engine.Run()
}

运行,可以看到,下面提示了debug模式,监听的端口,

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in \"debug\" mode. Switch to \"release\" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

两行代码,就注册好了一个web服务器,并启动了服务器,

engine := gin.Default()
engine.Run()

这里的Run()函数有一个参数,用来设置端口,如果不设置,那么默认是8080端口。
前面说了,默认是debug模式,那么如何修改模式呢,

package main

import (
	\"fmt\"
	\"github.com/gin-gonic/gin\"
)

func main() {
	//设置模式,设置模式要放在调用Default()函数之前
	gin.SetMode(gin.ReleaseMode)
	engine := gin.Default()
	//查看模式
	fmt.Println(gin.Mode())
	engine.Run()
}

注意,设置模式要放在注册路由gin.Default()之前,如果放在后面,虽然查看模式的时候,发现已经是release模式了,但是还是会打印一些debug信息,因为Default函数里面默认是debug模式,并且会打印一些debug信息,会显得混乱。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表