Go 数据类型突然改变

Go 数据类型突然改变,go,Go,我试图将值附加到数组中。代码如下所示: func MakeParamFrom(data ...interface{}) (res []interface{}) { new := []interface{}{} params = &new for _, datum := range data { processParam(datum) fmt.Println("RESULT: ", *params) } fmt.Pri

我试图将值附加到数组中。代码如下所示:

func MakeParamFrom(data ...interface{}) (res []interface{}) {
    new := []interface{}{}
    params = &new
    for _, datum := range data {
        processParam(datum)
        fmt.Println("RESULT: ", *params)
    }
    fmt.Println("FINAL: ", *params)
    return *params
}

func processParam(data interface{}) {
    fmt.Println("DATA ", data)
    dataValue := reflect.ValueOf(data)
    fmt.Println("KIND: ", dataValue.Kind())
    dataKind := dataValue.Kind()
    if dataKind == reflect.Array || dataKind == reflect.Slice {
        length := dataValue.Len()
        for i := 0; i < length; i++ {
            fmt.Println(dataValue.Index(i), " is ", dataValue.Index(i).Kind())
            processParam(dataValue.Index(i))
        }
    } else if dataKind == reflect.Struct {
        fieldCount := dataValue.NumField()
        fmt.Println("FIELDCOUNT :", fieldCount)
        for i := 0; i < fieldCount; i++ {
            processParam(dataValue.Field(i).Interface())
        }
    } else {
        *params = append(*params, data)
    }
}
我得到了以下结果:

DATA  show
KIND:  string
RESULT:  [show]
DATA  123
KIND:  int
RESULT:  [show 123]
DATA  [1234 456 789]
KIND:  slice
1234  is  int
DATA  1234
KIND:  struct
FIELDCOUNT : 3
为什么1234从int变为struct?如果我想要1234作为int(或它应该具有的其他类型),我应该怎么做?谢谢,我解决了这个问题

关键是将参数作为接口传递:

if dataKind == reflect.Array || dataKind == reflect.Slice {
        length := dataValue.Len()
        for i := 0; i < length; i++ {
            fmt.Println(dataValue.Index(i), " is ", dataValue.Index(i).Kind())
            processParam(dataValue.Index(i).Interface())
        }
如果dataKind==reflect.Array | | dataKind==reflect.Slice{
长度:=dataValue.Len()
对于i:=0;i
你能接受这个答案并结束这个问题吗?谢谢!@piyuschugh我要到两天后才能接受这个答案
if dataKind == reflect.Array || dataKind == reflect.Slice {
        length := dataValue.Len()
        for i := 0; i < length; i++ {
            fmt.Println(dataValue.Index(i), " is ", dataValue.Index(i).Kind())
            processParam(dataValue.Index(i).Interface())
        }