猿问

允许任何类型的切片作为参数

我是 Go 的新手(来自 python),我在这里遇到了一些困难。我试图允许任何类型的切片进入我的结构/函数,它只包含该切片长度的计数。


import "go/types"


type Response struct {

    Count int `json:"count"`

    Results []types.Struct `json:"results`

}


func NewResponse(results []types.Struct) (r *Response) {

    r.Count = len(results)

    r.Results = results

    return

}


GCT1015
浏览 136回答 2
2回答

繁星淼淼

您可以interface{}用作任何类型。type Response struct {  Count int `json:"count"`  Results []interface{} `json:"results`}更新len(rsp.results)应该管用。 http://play.golang.org/p/RA2zVzWl2q

汪汪一只猫

任意类型在 Go 中是完全合法的。在您的情况下,可能适合[]interface{}用作Results. 当需要知道类型时,请使用类型 switch。package mainimport (    "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可以编组为类型[]bytetype Response struct {    Count   int              `json:"count"`    Results *json.RawMessage `json:"results`}
随时随地看视频慕课网APP

相关分类

Go
我要回答