我从某个API得到的大多数响应体都具有以下结构:
{
"size": 2,
"values": [
// values whose types differ based on the endpoint that was called
]
}
字符串
例如,如果我点击/api/v1/cars
,我会返回:
{
"size": 1,
"values": [
{
"make": "Honda",
"year": 1994,
}
]
}
型
如果我点击/api/v1/courses
,
{
"size": 2,
"values": [
{
"name": "Spanish",
"startDate": "2023-08-07T04:00:00Z",
},
{
"name": "Business",
"startDate": "2023-08-21T04:00:00Z",
}
]
}
型
对于泛型,它看起来像这样工作得很好:
type ResponseValue interface {
car | course
}
type Response[T ResponseValue] struct {
Size int
Values []T
}
型
Playground
在泛型被引入之前,如果不创建像Size
这样的重复值的类型(真实的数据有比size
多得多的字段),这是如何实现的呢?
type carResp struct {
Size int
Values []car
}
type coursesResp struct {
Size int
Values []course
}
型
3条答案
按热度按时间sdnqo3pr1#
你会嵌入一般的React的东西,
字符串
lzfw57am2#
这种 Package 的数据结构被称为“envelope”。这对于返回分页响应的API来说很常见。在go有泛型之前,envelope是用接口类型 Package 的:
字符串
结果:
型
fruv7luv3#
将
Values
字段decompose为类型any
:字符串
要解封
response
,请将Values
设置为所需类型的指针。json.Unmarshal
函数解码为该值。型
像这样使用它:
型
https://go.dev/play/p/qVxYN4h4tlA