文章目录
- Gin快速搭建一个web服务
- Gin数据交互JSON串内容规范
- Gin使用结构体返回数据给前端
- Gin配置POST类型的路由
- Gin获取GET请求参数
- Gin获取POST请求参数-form-data类型
- Gin获取POST请求参数-JSON类型
- Gin获取参数绑定至结构体
Gin快速搭建一个web服务
- 下载包
\\新建一个文件,文件名gitstudy,然后右击使用vscode打开,初始化目录,并下载包
go mod init ginstudy
go get -u github.com/gin-gonic/gin
- 新建main.go
package mainimport ("net/http""github.com/gin-gonic/gin"
)func main() {//1. 创建一个路由引擎,之后可以在路由引擎中添加一些路由和路由处理逻辑r := gin.Default()//2. 添加路由到路由引擎,以及指定该路由的处理逻辑// GET("该路由的路径,处理该路由的逻辑")r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong",})})r.GET("/", func(c *gin.Context) {//c.String//http.StatusOk, 就是状态码200,http这个包定义了相关状态码别名,直接调用就好c.String(http.StatusOK, "你在访问首页")})//3. 启动gin服务r.Run() // 默认监听8080,可以修改其他端口,r.Run(:8081)
}
Gin数据交互JSON串内容规范
- 用独立函数返回json串的写法
// 定义一个函数,用于gin处理相关请求的逻辑,并返回json数据
func getUserInfo(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"name": "马云","age": 18,"address": "杭州",})
}//使用独立的函数处理逻辑r.GET("/api/user/info", getUserInfo)
浏览器访问
- 前后端分离时,返回j给前端json串常用的格式,这是相对标准的格式,可以给前端返回数据都按这个格式
/*{"status": 200, //请求已经收到,后端处理返回给前端状态码,命名自定义code、statusCode"message": "查询成功""data": {"name": "马云","age": "18","address": "杭州",}}*/
Gin使用结构体返回数据给前端
type UserInfo struct {Username string `json:"username"`Age int `json:"age"`Address string `json:"address"`
}type RetrunData struct {Status int `json:"status"`Message string `json:"message"`Data UserInfo `json:"data"`
}func retrunDataWithStruct(c *gin.Context) {UserInfo := UserInfo{Username: "马云",Age: 18,Address: "杭州",}RetrunData := RetrunData{Status: 200,Message: "用户信息查询",Data: UserInfo,}c.JSON(http.StatusOK, RetrunData)
}r.GET("/api/usr/infoWithSturct", retrunDataWithStruct)
Gin配置POST类型的路由
跟get配置基本一样,只是访问的需要postman使用post请求
func addUser(c *gin.Context) {RetrunData := RetrunData{Status: 200,Message: "创建成功",}c.JSON(http.StatusOK, RetrunData)
}r.POST("/api/user/add", addUser)
Gin获取GET请求参数
参数是什么?就是url 问号后面的字段。?articleId=149418888,多个参数使用&符号分隔
例如:https://editor.csdn.net/md/?articleId=149418888&username=admin
1.配置接收参数
//接受参数u := c.Query("username") //u := c.DefaultQuery("username","小马")id, _ := strconv.Atoi(c.Query("id"))//去数据库中查询该用户信息fmt.Printf("拿到用户名:%s, ID:%d\n", u, id)
-
发送带参数请求
-
查看参数是否已接收到
Gin获取POST请求参数-form-data类型
// POST数据提交格式有两种:
// JSON {}
// from-data 表单,数据量比较小使用,两种方法都有用到func addUser(c *gin.Context) {// POST获取请求参数//from-data获取请求参数u := c.PostForm("username")age, _ := strconv.Atoi(c.PostForm("age"))//address := c.PostForm("address")address := c.DefaultPostForm("address", "北京") //如果请求里没有这个key,就使用默认值,如果传有这个key就以你的配置为准UserInfo := UserInfo{Username: u,Age: age,Address: address,}RetrunData := RetrunData{Status: 200,Message: "创建成功",Data: UserInfo,}c.JSON(http.StatusOK, RetrunData)
}
Gin获取POST请求参数-JSON类型
func addUserByJson(c *gin.Context) {// POST获取请求参数// JSON接受参数jsonData, _ := c.GetRawData()//拿到json串之后,也有两种处理。//1.转成一个mapvar m map[string]interface{}json.Unmarshal(jsonData, &m)c.JSON(http.StatusOK, m)}
Gin获取参数绑定至结构体
//模型绑定
// 可以把请求的数据直接绑定到结构体 // 常用
// JSON接受参数,并且绑定到结构体func addUserBindStuct(c *gin.Context) {UserInfo := UserInfo{}if err := c.ShouldBindJSON(&UserInfo); err != nil {// 说明绑定失败fmt.Println("数据绑定失败", err.Error())c.JSON(http.StatusOK, gin.H{"message": "参数格式不正确","status": 500,})} else {c.JSON(http.StatusOK, UserInfo)}}