Go语言Web API响应通用结构体封装
本文探讨如何构建一个Go语言Web API响应的通用基础结构体,该结构体包含通用的状态码和消息字段,并能灵活地容纳不同API接口返回的各种数据。
目标结构
我们希望构建一个结构体,其JSON输出能够适应以下两种情况:
{
"status": 1,
"data": {
"id": 100,
"name": "",
"age": 32,
"isdeleted": true
},
"message": "ok"
}
{
"status": 1,
"data": {
"classname": "1班",
"teachername": "李明"
},
"message": "ok"
}
解决方案:使用interface{}
为了实现这种灵活性,我们可以将data
字段的类型设置为interface{}
:
type Base struct {
Status int64 `json:"status"`
Data interface{} `json:"data"`
Message string `json:"message"`
}
interface{}
类型可以持有任何类型的值,因此可以适应不同API接口返回的不同数据结构。
另一种方案:使用map[string]interface{}
如果你的API响应数据并非结构体,而是键值对形式,那么使用map[string]interface{}
作为Data
字段的类型更合适:
type Base struct {
Status int64 `json:"status"`
Data map[string]interface{} `json:"data"`
Message string `json:"message"`
}
这种方式能够更直接地处理非结构化的JSON响应数据。 选择哪种方案取决于你的API设计和数据结构。
通过以上方法,你可以创建一个通用的API响应结构体,方便地处理各种不同的API响应数据,提高代码的可重用性和可维护性。 记住,使用json:"..."
标签来确保JSON序列化和反序列化正确。