Gin框架
原创
©著作权归作者所有:来自51CTO博客作者xiaoxiaoyu8510的原创作品,请联系作者获取转载授权,否则将追究法律责任
中文文档
https://github.com/skyhee/gin-doc-cn
脚手架包目录
配置文件放到config包下,其他需要依赖config的包支持依赖,不需要从main.go一级一级的传递下去
路由参数
指的是在路由路径中定义的参数,例如请求 URI 是 /user/42
,42 作为用户的 ID,那么 42 就是路由参数
查询参数
注意路由参数不是查询字符串,例如 /user?ID=42
, 这个 ID=42
,也就是问号后边的才是查询字符串
必选参数
使用 :param
的语法完成必选参数,例如 /user/:ID
,即可匹配 /user/42
这个 URI,但不能匹配 /user
或 /user/
这个 URI
可选参数
使用 *param
的语法完成可选参数的定义,例如 /user/*ID
可以匹配 /user/42
和 /user
或 /user
的 URI,例如:
router.GET("/user/:ID", func(c *gin.Context) {
ID := c.Param("ID")
})
若没有匹配到,则 ID 为空字符串
1.URL中带参数,如 Get /user/10000/group/200 ,则获取的id是10000, group_id是200
group := engine.Group("user")
group.GET("/:user_id/group/:group_id", controller.GetUserHandler)
id := c.Param("user_id")
groupId := c.Param("group_id")
2.gin 可以使用middleware,你在middleware里面解析token,拿到user_id 等等不就可以了嘛,这样是比较正规的
engine := gin.Default() //默认启动,包含 Logger、Recovery 中间件
3. 定义gin的上下文变量
func CustomRouterMiddle1(c *gin.Context) {
//在gin上下文中定义一个变量
c.Set("example1", "CustomRouterMiddle1")
//在处理方法中读取
//strAccountId := c.Keys["example1"].(string) 或者使用c.GetString("example1")
//请求之前
c.Next()
}
4.获取post的原始字符串
data, err := c.GetRawData()
if err!=nil {
//log.Fatalln(err)
}
fmt.Printf("recv post data:\n %s\n", data)
5.接收post body中传递数组
//服务端解析
userId := c.PostFormArray("userId")
//客户端发送
func httpPostForm() {
users := []string{"1000", "1001","1002"}
resp, err := http.PostForm("http://127.0.0.1:18000/group/create",
url.Values{"userId": users , "groupName": {"123"}})
if err != nil {
// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
}
6. 加载html,css资源
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("./static/html/index.html") //加载主页
r.StaticFS("/static", http.Dir("./static")) //加载./static/css/* 等资源文件,如果不加载css,也可以不调用
r.GET("/", func(c *gin.Context) {
c.HTML(200, "index.html", "")
})
r.Run("0.0.0.0:8080")
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="/static/js/common/angular.min.js"></script>
<link rel="stylesheet" href="/static/css/bootstrap.css" />
<script type="text/javascript" src="/static/js/common/jquery.min.js"></script>
<script type="text/javascript" src="/static/js/common/bootstrap.js"></script>
<body ng-app="myApp">
<a>xingming: </a><input type="text" />
<div ng-controller="apiCtrl">
<input type="text" ng-model="name"><br> <button class = "btn btn-success">删除</button>
<input type="text" ng-model="url"><br>
<br>
First Name: <input type="text" ng-model="firstName"><br>
Last Name: <input type="text" ng-model="lastName"><br>
</div>
<br>
</body>
<script>
var app = angular.module('myApp', []);
app.controller('apiCtrl', function($scope) {
$scope.name= "GetName";
$scope.url= "http://127.com";
$scope.firstName= "John";
$scope.lastName= "Doe";
});
</script>
</html>