我正在尝试定义一个结构,它可以保存任何类型的数组,如:
type APIResonse struct {
length int
data []interface{}
}
我希望data
属性能够保存任何类型/结构的数组,这样我就可以拥有一个响应类型,最终将序列化为json。所以我想要写的东西如下:
someStruct := getSomeStructArray()
res := &APIResponse{
length: len(someStruct),
data: someStruct,
}
enc, err := json.Marshal(res)
Go中有可能吗?我一直在cannot use cs (type SomeType) as type []interface {} in assignment
。或者我是否必须为每种数据变体创建不同的响应类型?或者也许我完全是这个错误/不是像Go一样。任何帮助将不胜感激!
答案 0 :(得分:2)
该代码存在一些问题。
您需要使用interface{}
,而不是[]interface{}
,[]
也称为切片,数组是固定数量的元素,例如[10]string
。
您的APIResponse
字段未导出,因此json.Marshal
不会打印任何内容。
func main() {
d := []dummy{{100}, {200}}
res := &APIResponse{
Length: len(d),
Data: d,
}
enc, err := json.Marshal(res)
fmt.Println(string(enc), err)
}