1 简介
-
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
-
对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的
net/http
足够简单,性能也非常不错 -
1.1 安装
要安装Gin软件包,您需要安装Go并首先设置Go工作区。
1.首先需要安装Go(需要1.10+版本),然后可以使用下面的Go命令安装Gin。
go get -u github.com/gin-gonic/gin
2.将其导入您的代码中:
import “github.com/gin-gonic/gin”
3.(可选)导入net/http。例如,如果使用常量,则需要这样做http.StatusOK。
import “net/http”
1.2 hello word
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 1.创建路由
r := gin.Default()
// 2.绑定路由规则,执行的函数
// gin.Context,封装了request和response
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello World!")
})
// 3.监听端口,默认在8080
// Run("里面不指定端口号默认为8080")
r.Run(":8000")
}
输出结果
2 gin 路由
2.1 基本路由
-
gin 框架中采用的路由库是基于httprouter做的
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello word")
})
r.POST("/xxxpost",getting)
r.PUT("/xxxput")
//监听端口默认为8080
r.Run(":8000")
}
2.2 Restful风格的API
-
gin支持Restful风格的API
-
即Representational State Transfer的缩写。直接翻译的意思是”表现层状态转化”,是一种互联网应用程序的API设计理念:URL定位资源,用HTTP描述操作
1.获取文章/blog/getXxx Get blog/Xxx
2.添加 /blog/addXxx POST blog/Xxx
3.修改 /blog/updateXxx PUT blog/Xxx
4.删除 /blog/delXxxx DELETE blog/Xxx
2.3 API参数
-
可以通过Context的Param方法来获取API参数
-
localhost:8000/xxx/zhangsan
package main
import (
"net/http"
"strings"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
//截取/
action = strings.Trim(action, "/")
c.String(http.StatusOK, name+" is "+action)
})
//默认为监听8080端口
r.Run(":8000")
}
输出结果:
2.4 URL参数
-
URL参数可以通过DefaultQuery()或Query()方法获取
-
DefaultQuery()若参数不村则,返回默认值,Query()若不存在,返回空串
-
API ? name=zs
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/user", func(c *gin.Context) {
//指定默认值
//http://localhost:8080/user 才会打印出来默认的值
name := c.DefaultQuery("name", "枯藤")
c.String(http.StatusOK, fmt.Sprintf("hello %s", name))
})
r.Run()
}
不传递参数输出的结果:
传递参数输出的结果:
2.5 表单参数
-
表单传输为post请求,http常见的传输格式为四种:
-
application/json
-
application/x-www-form-urlencoded
-
application/xml
-
multipart/form-data
-
-
表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数
-
先写一个 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>Document</title>
</head>
<form action="http://10.0.0.10:8888/form" method="POST" action="application/x-www-form-urlencoded">
用户名:<input type="text" name="username" placeholder="请输入你的名字"> <br>
密 码:<input type="password" name="userpassword" placeholder="请输入你的密码" > <br>
<input type="submit" value="提交">
</form>
</html>
-
通过 gin 调用该 html 文件
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 1.创建路由
r := gin.Default()
// 2.gin 通过该函数能够实现对 html 文件的加载,填写文件路径
r.LoadHTMLFiles("/data/gintest/index.html")
/*
3.定义 GET 绑定路由规则,执行的函数
gin.Context,封装了 request 和 response 等方法预览 (在新窗口中打开)
*/
r.GET("/", func(c *gin.Context) {
// 4.调用 gin.Context.HTML 方法状态码 http.StatusOK 200 ,访问的 index.html 文件
c.HTML(http.StatusOK, "index.html", gin.H{})
})
/*
4.定义 POST 绑定路由规则,执行的函数
*/
r.POST("/form", func(c *gin.Context) {
/*
类型为 post
post 请求的用户 username
post 请求的密码 password
*/
types := c.DefaultPostForm("type", "post")
username := c.PostForm("username")
password := c.PostForm("userpassword")
c.String(http.StatusOK, fmt.Sprintf("username:%s,password:%s,type:%s", username, password, types))
})
// 5.监听端口,默认在8080
// Run("里面不指定端口号默认为8080")
r.Run(":8888")
}
访问并输入用户和密码
自动跳转 post 方法