如何在运行时指定类型的元素数组

I am trying to create a array of elements with a type known only at the run time (a pkg API gets to retrieve elements in json and convert to struct). I have a helper function something like below, which takes an interface as a param and trying to get the type of interface while calling make.

golang compiler doesn't seems to like it.

var whatAmI = func(i interface{}) { 
        a := reflect.TypeOf(i)

        //var typ reflect.Type = a

        b := make (a, 10)    //10 elem with type of i

        //b := new (typ)
        fmt.Printf ("a: %v b: %v", a, b)
}

prog.go:21:14: a is not a type

I tried various combinations of reflects but no help so far. This seems to me can be a common problem to run in to. How can I solve/workaround this?

Get the type for a slice given a value of the element type, v:

sliceType := reflect.SliceOf(reflect.TypeOf(v))

Create a slice with length and capacity (both 10 here).

slice:= reflect.MakeSlice(sliceType, 10, 10)

Depending on what you are doing, you may want to get the actual slice value by calling Interface() on the reflect.Value:

s := slice.Interface()

Run it on the playground.

Just make like :

b := make([]interface{}, 10)
for i := range b {
    b[i] = reflect.Zero(a)
}