Gin - Hello World

初始化项目

1
2
3
4
5
6
7
8
9
10
11
# 创建一个 Go 项目目录
mkdir gin-quickstart

# 进入 Go 项目目录下
cd gin-quickstart

# 初始化 Go mod
go mod init

# 安装 Gin 框架
go get -u github.com/gin-gonic/gin

创建一个 Gin 示例

创建一个 main.go 文件,并写入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
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()
}

运行服务

使用以下命令启动服务

1
go run main.go

此时可以通过 http://localhost:8080/ping 访问服务。

Gin - Hello World

代码讲解

gin.Default

1
router := gin.Default()
  • 这里创建了一个 Gin 的路由引擎 router (类型是 *gin.Engine)
  • gin.Default 是一个便捷函数,返回一个默认带有中间件的 Engine
    • Logger():请求日志中间件,会在控制台打印每个请求的信息(Method、Path、状态码、耗时等)
    • Recovery(): 当 Handler panic 时恢复(recover), 并返回 500,避免程序崩溃
  • 如果不想使用默认中间件,可以用 gin.New() 来手动添加中间件。

下面是 gin.Default() 的函数声明:

1
2
3
4
5
6
7
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default(opts ...OptionFunc) *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine.With(opts...)
}

router.GET

1
router.GET("/ping", func(c *gin.Context) {
  • 注册一个 GET 路由,路径是 /ping。当客户端对 /ping 发起 GET 请求时,后面的 handler 会被调用。
  • func(c *gin.Context) 是路由处理函数(handler),接收一个 *gin.Context,他封装了请求、响应、路径参数、query 参数,post body 等常用功能

c.JSON 与 gin.H

1
c.JSON(200, gin.H{})
  • 在 handler 里调用 c.JSON(statusCode, obj),告诉 Gin:用 JSON 格式写响应体,并设置 HTTP 状态码为 200(OK)。
    • gin.Hmap[string]interface{} 的别名,方便快速构造 JSON 对象。在这里 gin.H{ "message": "pong" } 将被序列化为 {"message":"pong"}

router.Run()

1
r.Run()
  • 启动 HTTP 服务,默认监听地址是 0.0.0.0:8080(即对外所有网卡的 8080 端口)。
  • Run() 接收一个字符串参数,可以设置端口号,比如 r.Run(":3000")
  • Run() 会阻塞当前 goroutine,直到服务器停止。

下面是 gin.Run 的函数声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Run attaches the router to a http.Server and starts listening and serving HTTP requests.
// It is a shortcut for http.ListenAndServe(addr, router)
// Note: this method will block the calling goroutine indefinitely unless an error happens.
func (engine *Engine) Run(addr ...string) (err error) {
defer func() { debugPrintError(err) }()

if engine.isUnsafeTrustedProxies() {
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
"Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.")
}
engine.updateRouteTrees()
address := resolveAddress(addr)
debugPrint("Listening and serving HTTP on %s\n", address)
err = http.ListenAndServe(address, engine.Handler())
return
}

Gin - Hello World
https://blog.pangcy.cn/2025/11/18/后端编程相关/go/gin/Gin - Hello World/
作者
子洋
发布于
2025年11月18日
许可协议