【基于GO的Web开发9】gin框架返回json
一、JSON 渲染介绍在 Gin Web 开发中前后端交互最常返回 JSON 格式数据这个过程称为JSON 渲染。 核心 APIc.JSON(http状态码, 返回的数据)二、方法 1map 方式返回 JSON原生使用map[string]interface{}构造数据package main import ( net/http github.com/gin-gonic/gin ) func main() { r : gin.Default() r.GET(/json, func(c *gin.Context) { //原生map构造json数据 data : map[string]interface{}{ name: 小王子, message: hello world!, age: 18, } c.JSON(http.StatusOK, data) }) r.Run(:9090) }gin.H 快捷写法推荐gin.H本质就是map[string]interface{}省去手写 map 类型代码更简洁data : gin.H{ name: 小王子, message: hello world!, age: 18, } c.JSON(http.StatusOK, data)三、方法 2结构体方式返回 JSON核心原理结构体返回 JSON 本质是JSON 序列化gin 利用反射读取结构体字段。⚠️ 硬性规则结构体字段名首字母必须大写小写为私有字段反射读取不到JSON 不会输出该字段。基础示例package main import ( net/http github.com/gin-gonic/gin ) //定义结构体类型type关键字 type Msg struct { Name string Message string Age int } func main() { r : gin.Default() r.GET(/another_json, func(c *gin.Context) { data : Msg{ Name: 小王子, Message: Hello golang!, Age: 18, } c.JSON(http.StatusOK, data) }) r.Run(:9090) }运行后返回结果键名大写{Name:小王子,Message:Hello golang!,Age:18}结构体 Tag 标签定制 JSON 键名如果想要返回小写 key给字段添加json标签自定义输出名称。type Msg struct { Name string json:name Message string json:message Age int json:age }添加标签后返回结果{name:小王子,message:Hello golang!,age:18}四、两种方式对比总结gin.H / map适合数据少、结构灵活、字段不固定的场景结构体适合数据字段固定项目大、规范严格的场景代码可读性更高五、高频易错点结构体忘记使用type定义类型错写成var msg struct{}结构体字段首字母小写JSON 返回缺失字段忘记调用c.JSON()路由没有返回任何响应访问测试地址http://127.0.0.1:9090/json http://127.0.0.1:9090/another_json
