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()方法中把这个方法和路由规则关联起来(和上面一模一样的写法)即可。