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

标签 go struct

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

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

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

最佳答案

在给定元素类型 v 的值的情况下获取 slice 的类型:

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

创建一个具有长度和容量的 slice (此处均为 10)。

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

根据您的操作,您可能希望通过调用 reflect.Value 上的 Interface() 来获取实际的 slice 值:

s := slice.Interface()

Run it on the playground .

关于go - 如何制作运行时指定类型的元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396248/

相关文章:

go - 在 Go 中重新分配方法

go - 如何从 Go 程序中的另一个文件导入定义?

cgo - 如何将字符串转换为 C 固定字符数组

go - LiteIDE 是否支持 "go to previous"快捷方式?

c - 有没有办法转储 C 结构?

c - fread_s 期间结构填充不正确

c - 在链表 C 中查找最高销量

go - 是否可以在运行时删除结构值的字段?

c# - 在 foreach 循环中更改另一个结构内的结构

c# - blittable 类型上的非 blittable 错误