将interface {}转换为[] interface {}

How can I cast an interface{} to []interface{} ?

rt := reflect.ValueOf(raw)
switch rt.Kind() {
case reflect.Slice:
    src := raw.([]interface{}) //this operation errors out
    for _,_ :=  range src {
        //some operation
    }  
}

I get an error panic: interface conversion: interface {} is []string, not []interface {} I want make this method generic enough to handle any type, not a fixed type.

I'm very new to Go and I'm stuck with this problem, most likely I'm doing it wrong. Any suggestion how can I get around this ?

Edit: Some operation is json.Marshal which return byte array.

What I'm really trying to do: I have a function that receives interface type, if it is an array/slice then I would like to run json.Marshal on each item rather than apply it as a whole. Basically, I'm trying to break up the JSON blob if the first level object is an array, and yes it needs to be generic.

As the error message states, a []string is not an []interface{}. See the FAQ for an explanation.

Use the reflect API do to this generically:

v := reflect.ValueOf(raw)
switch v.Kind() {
case reflect.Slice:
    for i := 0; i < v.Len(); i++ {
        elem := v.Index(i).Interface()
        // elem is an element of the slice
    }
}

Run it on the Playground.