1. 快速入门
安装:
- 下载并安装 gin:
$ go get -u github.com/gin-gonic/gin
- 代码中导入 gin 包:
import "github.com/gin-gonic/gin"
开始:
- 创建名为 main.go 的文件:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 定义路由的GET方法及响应处理函数
r.GET("/hello", func(c *gin.Context) {
// 将发送的信息封装成JSON发送给浏览器
c.JSON(http.StatusOK, gin.H{
//这是我们定义的数据
"message": "快速入门",
})
})
// 默认在本地8080端口启动服务
r.Run()
}
- 执行
go run main.go
命令来运行代码,在浏览器中输入127.0.0.1:8080/hello
访问。
{"message":"快速入门"}
2. Gin RESTful API
REST 的含义是客户端与 Web 服务器之间进行交互的时候,使用 HTTP 协议中的4个请求方法代表不同的动作:
- GET用来获取资源
- POST用来新建资源
- PUT用来更新资源
- DELETE用来删除资源
只要API程序遵循了REST风格,那就可以称其为 RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API 来进行交互,如:
请求方法 | URL | 含义 |
---|---|---|
GET | /student | 查询学生信息 |
POST | /create_student | 创建学生信息 |
PUT | /updata_student | 更新学生信息 |
DELETE | /delete_student | 删除学生信息 |
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/student", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "查询学生信息成功",
})
})
r.POST("/create_student", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "创建学生信息成功",
})
})
r.PUT("/updata_student", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "更新学生信息成功",
})
})
r.DELETE("/delete_student", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "删除学生信息成功",
})
})
r.Run()
}
执行 go run main.go
命令来运行代码,在 postman 中 GET 127.0.0.1:8080/student
访问。
{
"message": "查询学生信息成功"
}
3. Gin 路由
普通路由:
r.GET("/get",func(c *gin.Context) {})
r.GET("/login",func(c *gin.Context) {})
r.POST("/login",func(c *gin.Context) {})
可以匹配所有请求方法的Any方法:
r.Any("/test",func(c *gin.Context) {})
路由组:
可以将拥有共同前缀URL的路由划分为一个路由组:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
user := r.Group("/user")
user.GET("/index", func(c *gin.Context) {})
user.POST("/login", func(c *gin.Context) {})
r.Run()
}
4. Gin 中间件
Gin 框架允许开发者在处理请求的过程中,加入钩子函数,这个钩子函数就叫中间件。中间件适合处理一些公共的业务逻辑,比如登陆认证,权限校验,记录日志等。
package main
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
//定义一个中间键m1统计请求处理函数耗时
func m1(c *gin.Context) {
fmt.Println("m1 in...")
start := time.Now()
// c.Next() //调用后续的处理函数
c.Abort()//阻止调用后续的处理函数
cost := time.Since(start)
fmt.Printf("cost:%v\n", cost)
}
func index(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "ok",
})
}
func main() {
r := gin.Default()
r.GET("/", m1, index)
r.Run()
}