Gin学习

00 Gin框架简介

Gin是一个用Go语言编写的web框架,是一个拥有良好性能的API框架,其性能非常好,是GO世界里最流行的web框架,是一个简单易用的轻量级框架

01 Gin框架安装与使用

安装

下载并安装Gin:

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

第一个Gin实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

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

func main(){
// 创建一个默认的路由引擎
r := gin.Default()
// GET: 请求方式;/hello: 请求的路径
// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
r.GET("/hello",func(c *gin.Context){
// c.JSON: 返回JSON格式的数据
c.JSON(200,gin.H{
"message":"Hello world!",
})
})
// 启动HTTP服务,默认在0.0.0.0:8080启动服务
r.Run()
}

将上面的代码保存并编译执行,注意:把终端切到文件目录下再执行,然后使用浏览器打开127.0.0.1:8080/hello就能看到一串JSON字符串

02 RESTful API

REST代表一种软件架构风格,是Representational State Transfer的简称 简单来说,REST的含义就是客户端与web服务器之间进行交互时,使用HTTP协议中的四个请求方法代表不同的动作。

  • GET用来获取资源
  • POST用来新建资源
  • PUT用来更新资源
  • DELETE用来删除资源 只要API程序遵循了REST风格,那就可以将其称为RESTful API。目前在前后端分离的架构中,前后端基本上都是通过RESTful API来进行交互 现在我们举一个编写管理书籍系统的例子,该系统可以进行对一本书进行查询,创建,更新,删除等操作,如果我们按照RESTful API设计,就如下表所示| 请求方法 | URL | 含义 | | -------- | ----- | ------------ | | GET | | 获取书籍信息 | | POST | | 新建书籍信息 | | PUT | | 更新书籍信息 | | DELETE | | 删除书籍信息 |

实例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func main() {
r := gin.Default()
r.GET("/book", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "GET",
})
})

r.POST("/book", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "POST",
})
})

r.PUT("/book", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "PUT",
})
})

r.DELETE("/book", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "DELETE",
})
})
}

03 Gin渲染

HTML渲染

我们首先定义一个存放模板文件的templates文件夹,然后在其内部根据业务分别定义一个posts文件夹和一个users文件夹 其中posts/index.html文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{{define "posts/index.html"}}
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>posts/index</title>
</head>
<body>
{{.title}}
</body>
</html>
{{end}}

users/index.html文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{{define "users/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>users/index</title>
</head>
<body>
{{.title}}
</body>
</html>
{{end}}

Gin框架中使用LoadHTMLGlob()或者LoadHTMLFiles()方法进行HTML模板渲染。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func main() {
r := gin.Default()
r.LoadHTMLGlob("templates/**/*")
//r.LoadHTMLFiles("templates/posts/index.html", "templates/users/index.html")
r.GET("/posts/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "posts/index.html", gin.H{
"title": "posts/index",
})
})

r.GET("users/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "users/index.html", gin.H{
"title": "users/index",
})
})

r.Run(":8080")