Skip to content

Commit 813536f

Browse files
committed
Golang Web Framework For Gin
1 parent 695a9d4 commit 813536f

25 files changed

+1738
-0
lines changed
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
45.6 KB
Loading
Loading
36.7 KB
Loading
30.5 KB
Loading
Loading

docs/golang/web/gin/introduce.md

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
order : 1
3+
---
4+
5+
# 1. Gin 简介与环境搭建
6+
7+
## 1. 什么是Gin框架?
8+
9+
Gin是一个用Go语言编写的轻量级、高性能的Web框架。它具有以下特点:
10+
- **速度快**:Gin的性能非常出色,适合高并发场景。
11+
- **API友好**:Gin提供了简洁的API,易于使用。
12+
- **中间件支持**:Gin支持中间件机制,方便扩展功能。
13+
- **错误处理**:内置错误处理机制,简化了开发工作。
14+
15+
## 2. 安装Gin框架
16+
17+
在开始使用Gin之前,你需要安装Go语言环境。如果你还没有安装Go,可以在[Go官网](https://golang.org/dl/)下载并安装最新版本。
18+
19+
安装好Go后,可以使用以下命令安装Gin:
20+
21+
```bash
22+
go get -u github.com/gin-gonic/gin
23+
```
24+
25+
这条命令会从GitHub上下载Gin框架,并将其添加到你的Go工作区中。
26+
27+
## 3. 创建第一个Gin项目
28+
29+
现在我们可以创建一个简单的Gin项目。我们将编写一个Hello World应用来演示Gin的基本用法。
30+
31+
**步骤1:创建项目目录**
32+
33+
首先,创建一个新的目录用于存放我们的项目代码:
34+
35+
```bash
36+
mkdir gin-hello-world
37+
cd gin-hello-world
38+
```
39+
40+
**步骤2:创建Go模块**
41+
42+
在项目目录中,初始化一个新的Go模块:
43+
44+
```bash
45+
go mod init gin-hello-world
46+
```
47+
48+
这将创建一个`go.mod`文件,用于管理项目的依赖关系。
49+
50+
**步骤3:编写代码**
51+
52+
在项目目录中,创建一个名为`main.go`的文件,并在其中编写以下代码:
53+
54+
```go
55+
package main
56+
57+
import (
58+
"github.com/gin-gonic/gin"
59+
)
60+
61+
func main() {
62+
// 创建一个默认的Gin路由器
63+
r := gin.Default()
64+
65+
// 定义一个GET请求的路由和处理函数
66+
r.GET("/hello", func(c *gin.Context) {
67+
c.JSON(200, gin.H{
68+
"message": "Hello, World!",
69+
})
70+
})
71+
72+
// 启动Gin服务器,默认监听8080端口
73+
r.Run() // 监听并在0.0.0.0:8080上启动服务
74+
}
75+
```
76+
77+
**步骤4:运行代码**
78+
79+
在项目目录中,运行以下命令来启动应用:
80+
81+
```bash
82+
go run main.go
83+
```
84+
85+
你应该会看到输出如下:
86+
87+
```bash
88+
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
89+
90+
[GIN-debug] GET /hello --> main.main.func1 (3 handlers)
91+
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value to Config.TrustedProxies.
92+
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
93+
- using env: export GIN_MODE=release
94+
- using code: gin.SetMode(gin.ReleaseMode)
95+
96+
[GIN-debug] Listening and serving HTTP on :8080
97+
```
98+
99+
打开浏览器,访问`http://localhost:8080/hello`,你应该会看到以下JSON响应:
100+
101+
```json
102+
{
103+
"message": "Hello, World!"
104+
}
105+
```
106+
107+
![](assets/2024-07-08-111647.png)
108+
109+
## 总结
110+
111+
到这里,你已经成功地安装了 Gin 框架,并创建了一个简单的 Hello World 应用。你学到了如何创建一个Gin路由器,定义一个路由和处理函数,以及如何启动 Gin 服务器。接下来,可以深入学习Gin的更多功能,例如路由参数、中间件、请求处理和响应处理等。

docs/golang/web/gin/middleware.md

+152
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
---
2+
order : 5
3+
---
4+
5+
# 5. 中间件
6+
7+
中间件是 Gin 框架中非常重要的部分。中间件是处理请求的函数,可以在请求到达路由处理函数之前或在响应发送给客户端之前执行一些操作。中间件可以用于各种用途,如验证用户身份、记录日志、处理跨域请求等。
8+
9+
10+
Gin 框架允许你全局应用中间件、对特定路由应用中间件或对路由组应用中间件。
11+
12+
## 1. 自定义中间件
13+
14+
编写自定义中间件的基本形式是一个返回 `gin.HandlerFunc` 的函数。中间件函数接受一个 `*gin.Context` 参数。
15+
16+
```go
17+
package main
18+
19+
import (
20+
"fmt"
21+
"time"
22+
23+
"github.com/gin-gonic/gin"
24+
)
25+
26+
// Logger 中间件示例
27+
func Logger() gin.HandlerFunc {
28+
return func(c *gin.Context) {
29+
// 开始时间
30+
startTime := time.Now()
31+
32+
// 处理请求
33+
c.Next()
34+
35+
// 计算响应时间
36+
endTime := time.Now()
37+
latency := endTime.Sub(startTime)
38+
fmt.Printf("Request processed in %v\n", latency)
39+
}
40+
}
41+
42+
func main() {
43+
r := gin.Default()
44+
45+
// 全局应用 Logger 中间件
46+
r.Use(Logger())
47+
48+
r.GET("/ping", func(c *gin.Context) {
49+
c.JSON(200, gin.H{
50+
"message": "pong",
51+
})
52+
})
53+
54+
r.Run(":8080")
55+
}
56+
```
57+
![](assets/2024-07-08-154137.png)
58+
59+
![](assets/2024-07-08-154130.png)
60+
61+
## 2. 路由组中应用中间件
62+
63+
Gin 允许你对特定的路由组应用中间件,这样可以将中间件的作用范围限定在特定的路由组内。
64+
65+
```go
66+
package main
67+
68+
import (
69+
"net/http"
70+
71+
"github.com/gin-gonic/gin"
72+
)
73+
74+
// AuthRequired 中间件示例
75+
func AuthRequired() gin.HandlerFunc {
76+
return func(c *gin.Context) {
77+
// 模拟身份验证
78+
token := c.GetHeader("Authorization")
79+
if token != "valid-token" {
80+
c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
81+
c.Abort()
82+
return
83+
}
84+
c.Next()
85+
}
86+
}
87+
88+
func main() {
89+
r := gin.Default()
90+
91+
// 路由组
92+
auth := r.Group("/auth")
93+
{
94+
// 路由组中应用 AuthRequired 中间件
95+
auth.Use(AuthRequired())
96+
auth.GET("/profile", func(c *gin.Context) {
97+
c.JSON(200, gin.H{
98+
"user": "john",
99+
"role": "admin",
100+
})
101+
})
102+
auth.GET("/settings", func(c *gin.Context) {
103+
c.JSON(200, gin.H{
104+
"settings": "user settings",
105+
})
106+
})
107+
}
108+
109+
r.Run(":8080")
110+
}
111+
```
112+
113+
在这个示例中,`/auth` 路由组中的所有路由都会应用 `AuthRequired` 中间件。
114+
115+
## 3. 处理跨域请求(CORS)
116+
117+
处理跨域请求是中间件的一个常见用途。可以使用第三方库(如 `github.com/gin-contrib/cors`)来简化 CORS 中间件的实现。
118+
119+
```go
120+
package main
121+
122+
import (
123+
"github.com/gin-contrib/cors"
124+
"github.com/gin-gonic/gin"
125+
)
126+
127+
func main() {
128+
r := gin.Default()
129+
130+
// 使用 cors.Default() 中间件处理跨域请求
131+
r.Use(cors.Default())
132+
133+
r.GET("/ping", func(c *gin.Context) {
134+
c.JSON(200, gin.H{
135+
"message": "pong",
136+
})
137+
})
138+
139+
r.Run(":8080")
140+
}
141+
```
142+
143+
## 总结
144+
145+
学习 Gin 框架中的中间件是理解和使用 Gin 的关键。中间件可以用于:
146+
147+
- 记录日志
148+
- 身份验证
149+
- 错误处理
150+
- 处理跨域请求
151+
152+
通过掌握中间件的使用方法,可以大大提高 Gin 应用的可维护性和扩展性。

docs/golang/web/gin/readme.md

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
index : false
3+
icon : simple-icons:lightning
4+
dir :
5+
link : true
6+
order : 1
7+
---
8+
# Gin 框架
9+
10+
<Catalog />
11+
12+
13+
Gin 是一个用 Go 语言编写的 Web 框架,它具有轻量、高性能和良好的性能特点,适合构建高性能的 Web 应用程序和 API。以下是 Gin 框架的主要特点和优势:
14+
15+
## 特点和优势
16+
17+
1. **轻量高效**
18+
- Gin 框架设计简洁,性能优异,适合快速开发和高效执行。
19+
- 它的核心代码库简洁,不依赖大量第三方库,使得整体体积较小。
20+
21+
2. **快速路由**
22+
- Gin 提供了灵活而强大的路由功能,支持参数化路由、RESTful 风格的路由定义,以及组路由的方式管理路由。
23+
- 路由匹配和处理速度快,适合处理大量请求。
24+
25+
3. **中间件支持**
26+
- Gin 提供了丰富的中间件支持,可以方便地实现日志记录、身份验证、跨域资源共享(CORS)等常见的 Web 应用中间件功能。
27+
28+
4. **JSON 处理**
29+
- Gin 内置了对 JSON 的支持,可以方便地处理 JSON 数据的解析和生成。
30+
31+
5. **HTTP 方法支持**
32+
- Gin 支持常见的 HTTP 方法,如 GET、POST、PUT、DELETE 等,易于实现 RESTful 风格的 API 设计。
33+
34+
6. **错误处理**
35+
- Gin 提供了统一的错误处理机制,可以方便地捕获和处理路由处理函数中的错误,保证应用程序的稳定性和可靠性。
36+
37+
7. **模板渲染**
38+
- Gin 支持使用 HTML 模板渲染引擎,可以方便地生成动态的 HTML 页面响应。
39+
40+
8. **插件系统**
41+
- Gin 框架的设计支持插件和中间件的灵活组合和扩展,可以根据需要自定义功能和行为。
42+
43+
9. **文档完善**
44+
- Gin 拥有完善的文档和社区支持,使得学习和使用过程更加顺畅和高效。
45+
46+
## 示例代码
47+
48+
以下是一个简单的 Gin 应用示例,展示了如何创建一个基本的 HTTP 服务器:
49+
50+
```go
51+
package main
52+
53+
import (
54+
"net/http"
55+
56+
"github.com/gin-gonic/gin"
57+
)
58+
59+
func main() {
60+
// 创建一个默认的 Gin 引擎
61+
r := gin.Default()
62+
63+
// 定义一个 GET 请求处理函数
64+
r.GET("/hello", func(c *gin.Context) {
65+
c.JSON(http.StatusOK, gin.H{
66+
"message": "Hello, Gin!",
67+
})
68+
})
69+
70+
// 启动 HTTP 服务器,监听端口 8080
71+
r.Run(":8080")
72+
}
73+
```
74+
75+
## 更多资源和学习
76+
77+
- **官方文档**[Gin 文档](https://gin-gonic.com/docs/)
78+
- **GitHub 仓库**[Gin GitHub](https://github.com/gin-gonic/gin)
79+
- **视频教程**:Bilibili 上有很多关于 Gin 框架的教程视频,可以搜索观看。
80+
81+
## 总结
82+
83+
Gin 是一个简单而高效的 Web 框架,适用于构建各种规模的 Web 应用程序和 RESTful API。它的设计注重性能和易用性,使得开发者可以快速地搭建和部署 Go 语言的 Web 服务,同时具备良好的扩展性和灵活性。

0 commit comments

Comments
 (0)