中文文档

​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>