gin响应json数据

先不用管代码为什么这么写,先照着代码敲:

package main

import "github.com/gin-gonic/gin"

func _json(c *gin.Context) {
	type UserInfo struct {
		UserName string `json:"user_name"`
		Age      int    `json:"age"`
	}
	user := UserInfo{"Evan", 22}
	c.JSON(200, user)
}

func main() {
	//创建一个默认路由
	router := gin.Default()

	//绑定路由规则和路由函数,访问index路由,且由对应的函数去处理
	router.GET("/json", _json)

	//启动监听,gin会把web服务运行在本机的80端口上
	//修改ip为内网ip
	err := router.Run(":80")
	if err != nil {
		return
	}
}

然后运行代码;接着打开浏览器,输入下面这一行东西:

然后我们就可以看到页面了:

神奇!

 

接下来简单说说原理:

在main函数中,我们首先创建了一个默认的Gin路由引擎router,然后调用router.GET()函数,将路由规则与路由处理函数 _json 关联起来,该函数将在访问 /json 时被调用;

最后,router.Run() 将启动Web服务器,将监听在本地80端口,如果出现错误则会停止执行;

当浏览器访问 http://localhost/json 时,将会调用 _json 处理函数,它将返回一个JSON格式的用户信息。

 

那么在_json这个函数中,由于我们想要响应一个json格式的数据,所以我们定义了一个结构体,然后创建了一个这个结构体的实例。该函数最后使用 c.JSON() 方法来发送JSON响应,第一个参数为HTTP状态码,第二个参数为要发送的JSON数据。

 

如果有敏感数据,比如结构体中还有一个密码:

type UserInfo struct {
    UserName string `json:"user_name"`
    Password string `json:"-"`
    Age      int    `json:"age"`
}

我们肯定不希望在序列化时把密码的值也显示出来,那么直接采用上面那种写法就可以了,json后面加一个"-"。

 

json除了可以响应结构体,还可以响应map:

func _json2(c *gin.Context) {
	//json响应map
	userMap := map[string]string{
		"user_name": "Evan",
		"password":  "123456",
	}
	c.JSON(200, userMap)
}

这就是响应map数据的函数,在router.GET()方法中把这个方法和路由规则关联起来(和上面一模一样的写法)即可。

posted @ 2023-03-01 17:03  EvanTheBoy  阅读(283)  评论(0编辑  收藏  举报