0.简要介绍
Gin框架是go语言的一款简单,快速的框架,开箱即用,十分方便 以下是Gin框架的优势
- 快速:路由速度快,内存占用少
- 中间件:HTTP请求可以经过一系列中间件的处理
- 异常处理:服务始终可用不会宕机
- JSON:可以解析并验证请求的JSON,对于RESTful API的开发很有用
- 路由分组:将需要授权和不需要授权的API分组
- 渲染内置:原生支持JSON,XML,HTML渲染
1.基本配置
首要问题是配置go的代理
# 注意需要加上引号
# 设置goproxy.io代理
go env -w GOPROXY="https://goproxy.io"
# 设置GO111MOUDLE
go env -w GO111MODULE="on"
然后安装gin框架
go get github.com/gin-gonic/gin
到这个文件夹下即可找到gin框架
如果安装gin框架失败,可以在goland中尝试安装
2.简要入门
安装完成之后进行测试
package main
//导包
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "快速入门",
})
})
r.Run(":8888") //打开8888端口(如果没有这句话则默认打开8080端口)
}
此时在浏览器中即可访问
3.RESTful API
Representational State Transfer 表征状态转移/表现层状态转化
其含义就是客户端与web服务器进行通信交互的时候,使用HTTP协议的4个请求方法代表的不同动作
- GET获取资源
- POST新建资源
- PUT更新资源
- DELETE删除资源
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/info", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "获取信息",
})
})
r.POST("/create", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "创建信息",
})
})
r.PUT("/update", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "更新信息",
})
})
r.DELETE("/delete", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "删除信息",
})
})
r.Run(":8888")
}
浏览器访问127.0.0.0:8888
然后按f12打开开发者选项
找到网络控制台
分别测试4种状态
- GET
- POST
- PUT
- DELETE
4.渲染HTML
新建项目 新建templates文件夹 在这个文件夹之下新建index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>
账号:{{.name}}
</h1>
<h1>
密码:{{.pwd}}
</h1>
</body>
</html>
新建main.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.LoadHTMLGlob("./templates/*")
r.GET("/demo", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"name": "admin",
"pwd": "123321",
})
})
r.Run(":8888")
}
渲染完之前的html页面是
渲染完之后的html页面是
5.Gin路由(Route)
路由就是在任何网络中选择路径的过程 路由方法有GET,POST,PUT,PATCH,DELETE,OPTIONS还有ANY 无参数GET 就是显示在首页的信息 比如显示127.0.0.1:8888的信息
r.GET("/",func(c *gin.Context*){
c.String(http.StatusOK,"Who are you?")
})
获取Query参数
// 匹配users?name=xxx&role=xxx,role可选
r.GET("/users", func(c *gin.Context) {
name := c.Query("name")
role := c.DefaultQuery("role", "teacher")
c.String(http.StatusOK, "%s is a %s", name, role)
})
结果
Tom is a student