猿问

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

我正在尝试创建一个元素数组,其类型仅在运行时已知(pkg API 获取 json 中的元素并转换为结构)。我有一个类似下面的辅助函数,它将一个接口作为参数,并在调用 make 时尝试获取接口的类型。


golang 编译器似乎不喜欢它。


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 不是类型


我尝试了各种反射组合,但到目前为止没有帮助。在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?


小怪兽爱吃肉
浏览 112回答 2
2回答

繁花不似锦

获取给定元素类型值的切片的类型v:sliceType := reflect.SliceOf(reflect.TypeOf(v))创建一个具有长度和容量的切片(此处均为 10)。slice:= reflect.MakeSlice(sliceType, 10, 10)根据您的操作,您可能希望通过调用 reflect.Value 上的 Interface() 来获取实际的切片值:s := slice.Interface()

SMILET

就像:b := make([]interface{}, 10)for i := range b {    b[i] = reflect.Zero(a)}
随时随地看视频慕课网APP

相关分类

Go
我要回答