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")
|