一、定义结构体
type UserInfo struct {
Name string `json:"name"`
Age int `json:"age"`
Add string `json:"add"`
}
type ReturnData struct {
Message string `json:"message"`
Status string `json:"status"`
Data UserInfo `json:"data"`
}
二、get请求的Query方法
func getBindUser(c *gin.Context) {
//query用来获取用户输入的参数
name := c.Query("name")
//用来转换用户输入的参数为数字
age, _ := strconv.Atoi(c.Query("age"))
//用来获取用户输入的参数,并设置默认值为 "上海"
add := c.DefaultQuery("add", "上海")
//结构体实例化后与用户输入参数绑定
userinfo := UserInfo{
Name: name,
Age: age,
Add: add,
}
//结构体实例化并接收用户输入的参数进行绑定,实例化有两种方式,下面注释的算一种,未注释的是另一种
// returnData := make(map[string]interface{})
returnData := ReturnData{}
returnData.Message = "加载配置成功!"
returnData.Status = "200"
returnData.Data = userinfo
c.JSON(http.StatusOK, returnData)
fmt.Println(returnData)
}
三、post请求
1.获取用户输入参数的方法,并直接绑定到json格式
func returnDataBindUser(c *gin.Context) {
userInfo := UserInfo{}
if err := c.ShouldBindJSON(&userInfo); err != nil {
c.JSON(http.StatusOK, gin.H{
"messages": "加载配置失败!",
"status": 500,
})
fmt.Println("参数传递失败。。。", err.Error())
} else {
c.JSON(http.StatusOK, userInfo)
fmt.Printf("姓名:%s\n年龄:%d\n地址:%s\n", userInfo.Name, userInfo.Age, userInfo.Add)
}
}
2.第二种方式就是用formdata,此函数用from-data方式获取
//此方式并不是传输的json格式数据,只适合用于少量数据传输,如需要json格式,还需调用json方法绑定
c.GetPostForm()
四、这儿设置一下token的获取,并为用jwt方式,只是通过用户输入任意字符来判断是否带有token用来做个测试这个功能的安全是否成功
func glbloTokenIsNo(c *gin.Context) {
//这块儿是用户输入的任意字符当做token,脚本架部分会用到jwt
token := c.Query("token")
//这块儿会判断是否为空串,字符串要用空串判断,数字才可以用!=nil判断
if token == "" {
returnData := ReturnData{
Message: "获取token失败!",
Status: "401",
}
c.JSON(http.StatusOK, returnData)
}
c.String(200, "登录成功!")
}
五、路由分组
注:开始不懂为什么要分组,后来明白了,分组主不是用来管理路由,比如:你的访问url特别长,像/api/user/addUser/和/api/user/deleteUser这两个就可以将/api/app分为一组
apiGroup := r.Group("/api/user")
使用的时候就可以写成如下这样
//这样apiGroup就代表/api/user了
apiGroup.POST("/addUser", returnDataBindUser)