Golang - Gin框架
Gin
是一个用 Go语言编写的 web框架。它是一个类似于martini
但拥有更好性能的API框架, 由于使用了httprouter
,速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上Gin
。
一、创建工程
我们使用 Goland来完成 Gin框架的实例
创建工程时注意上图箭头标记的地方
- 选择go modules
- 在environment中添加proxy为
https://goproxy.cn
- go.mod文件用于保存该工程的依赖信息(引用了xx库...)
二、第一 个Gin 实例
(1)导入 gin 库
import "github.com/gin-gonic/gin"
(2)创建一个路由引擎对象
r := gin.Default()
(3)GET方法
实例化后的路由引擎对象 r 有GET、POST等方法。其中GET方法表示仅当浏览器以GET方式访问relativePath时才作出反应
r.GET("/hello", sayHello)
代码解析:
GET方法共有两个参数,第一个为relativePath,表示当浏览器以GET访问xxx/hello时会...;第二个为function,表示当浏览器访问relativePath时将执行这个函数
(4)GET - 执行函数
func sayHello(c *gin.Context) {
c.JSON(200, gin.H{
"message":"hello world!",
})
}
代码解析:
- 执行函数必须要有 gin.Context 类型的参数 c
- c.Json函数功能:
JSON serializes the given struct as JSON into the response body
此函数把给定的结构体类型转换为json格式并返回!一定注意此函数直接返回了第二个参数 - 状态码200:表示status OK,即能够成功交互
- 补充说明 —— 关于目前的前后端交互
之前的web编程:当收到请求时,后端将整个html文件(本质上是二进制文本)通过html协议传送到前端
现在的web编程:当收到请求时,后端仅仅用html协议传送数据(血肉);网站的框架样式(骨架)则通过其他方式传送
(5)RESTful API:一种风格
简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用 HTTP协议中的 4个请求方法代表不同的动作。
GET
用来获取资源POST
用来新建资源PUT
用来更新资源DELETE
用来删除资源。只要API程序遵循了 REST风格,那就可以称其为 RESTful API。目前在前后端分离的架构中,前后端基本都是通过 RESTful API来进行交互。
- 不采用restful api
只分 GET 与 POST 请求,通过多个页面来区分不同功能
请求方法 | URL | 含义 |
---|---|---|
GET | /book | 查询书籍信息 |
POST | /create_book | 创建书籍记录 |
POST | /update_book | 更新书籍信息 |
POST | /delete_book | 删除书籍信息 |
例如通过relativePath来实现创建、更新、删除等功能
- 采用restful api
请求方法 | URL | 含义 |
---|---|---|
GET | /book | 查询书籍信息 |
POST | /book | 创建书籍记录 |
PUT | /book | 更新书籍信息 |
DELETE | /book | 删除书籍信息 |
在后端中就按照 GET、POST、PUT、DELETE这四种功能来定义四种方法
这就使得我们可以通过不同的方法来访问同一个relativePath来达到不同的效果
- Gin框架支持 restful api 的开发
r.GET("/hello", sayHello)
r.POST("/hello", sayHello)
r.PUT("/hello", sayHello)
r.DELETE("/hello", sayHello)
(6)运行 - r.Run( )
package main
import "github.com/gin-gonic/gin"
func sayHello(c *gin.Context) {
c.JSON(200, gin.H{
"message":"hello world!",
})
}
func main() {
r := gin.Default()
r.GET("/hello", sayHello)
r.Run()
}
效果:
(7)restful api实现
package main
import "github.com/gin-gonic/gin"
func sayHello_get(c *gin.Context) {
c.JSON(200, gin.H{
"message":"this is get method...",
})
}
func sayHello_post(c *gin.Context) {
c.JSON(200, gin.H{
"message":"this is post method...",
})
}
func sayHello_put(c *gin.Context) {
c.JSON(200, gin.H{
"message":"this is put method...",
})
}
func sayHello_delete(c *gin.Context) {
c.JSON(200, gin.H{
"message":"this is delete method...",
})
}
func main() {
r := gin.Default()
r.GET("/hello", sayHello_get)
r.POST("/hello", sayHello_post)
r.PUT("/hello", sayHello_put)
r.DELETE("/hello", sayHello_delete)
r.Run()
}
这里利用postman进行验证:
-
get
-
post
put与delete类似,不一一列举...