2 回答
TA贡献1775条经验 获得超11个赞
您可以interface{}用作任何类型。
type Response struct {
Count int `json:"count"`
Results []interface{} `json:"results`
}
更新
len(rsp.results)应该管用。 http://play.golang.org/p/RA2zVzWl2q
TA贡献1898条经验 获得超8个赞
任意类型在 Go 中是完全合法的。在您的情况下,可能适合[]interface{}用作Results. 当需要知道类型时,请使用类型 switch。
package main
import (
"fmt"
)
type Response struct {
Count int `json:"count"`
Results []interface{} `json:"results`
}
func NewResponse(results []interface{}) (r *Response) {
r.Count = len(results)
r.Results = results
return
}
func AssertResultType(results []interface{}) {
for _, v := range results {
switch v := v.(type) {
default:
fmt.Printf("unexpected type %T\n", v) //t has unexpected type
case bool:
fmt.Printf("boolean %t\n", v) // t has type bool
case int:
fmt.Printf("integer %d\n", v) // t has type int
case string:
fmt.Printf("string %q\n", v) // t has type string
}
}
}
func main() {
args := []interface{}{1, "hello", true, "foo", 21}
r := NewResponse(args)
AssertResultType(r.Results)
}
在 JSON 的情况下,*json.RawMessage可以编组为类型[]byte
type Response struct {
Count int `json:"count"`
Results *json.RawMessage `json:"results`
}
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报