Golang API响应的Catchall类型

时间:2014-07-14 22:36:44

标签: json api types struct go

我正在尝试定义一个结构,它可以保存任何类型的数组,如:

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一样。任何帮助将不胜感激!

1 个答案:

答案 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)
}

playground