【基于GO的Web开发9】gin框架返回json

一、JSON 渲染介绍

在 Gin Web 开发中,前后端交互最常返回 JSON 格式数据,这个过程称为JSON 渲染 。 核心 API:c.JSON(http状态码, 返回的数据)

二、方法 1:map 方式返回 JSON

原生使用map[string]interface{}构造数据

Go 复制代码
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 类型,代码更简洁

Go 复制代码
data := gin.H{
	"name":    "小王子",
	"message": "hello world!",
	"age":     18,
}
c.JSON(http.StatusOK, data)

三、方法 2:结构体方式返回 JSON

核心原理

结构体返回 JSON 本质是JSON 序列化,gin 利用反射读取结构体字段。

⚠️ 硬性规则:结构体字段名首字母必须大写,小写为私有字段,反射读取不到,JSON 不会输出该字段。

基础示例

Go 复制代码
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标签,自定义输出名称。

Go 复制代码
type Msg struct {
	Name    string `json:"name"`
	Message string `json:"message"`
	Age     int    `json:"age"`
}

添加标签后返回结果:

复制代码
{"name":"小王子","message":"Hello golang!","age":18}

四、两种方式对比总结

  1. gin.H / map:适合数据少、结构灵活、字段不固定的场景
  2. 结构体:适合数据字段固定,项目大、规范严格的场景,代码可读性更高

五、高频易错点

  1. 结构体忘记使用type定义类型,错写成var msg struct{}
  2. 结构体字段首字母小写,JSON 返回缺失字段
  3. 忘记调用c.JSON(),路由没有返回任何响应

访问测试地址

Go 复制代码
http://127.0.0.1:9090/json
http://127.0.0.1:9090/another_json
相关推荐
mldong24 分钟前
Python 开发者也有自己的轻量工作流引擎了:pip install 一行,5 分钟跑通一条审批流
后端·python·架构
郑州光合科技余经理30 分钟前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
怕浪猫7 小时前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
西瓜太郎12347 小时前
外层模型卡片与分组详情成功率不一致,应该怎么排查?
前端·typescript·go·软件工程·react
GreenTea8 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
考虑考虑8 小时前
Java实现hmacsha256加密算法
java·后端·java ee
凤山老林9 小时前
聊聊企业级 API 安全:Spring Boot 落地 OAuth 2.1、mTLS 与接口签名防篡改
spring boot·后端·安全·oauth
林鹿9 小时前
maven属性与groovy变量对照表
后端
金金计较.9 小时前
Go语言-3
java·开发语言·golang
烽火戏诸诸诸侯10 小时前
AI 让我的独门小工具焕发第二春
后端·ai编程·vibecoding