登录
首页 >  Golang >  Go问答

如何使用运行时指定的类型创建元素数组

来源:stackoverflow

时间:2024-04-05 09:33:39 308浏览 收藏

一分耕耘,一分收获!既然都打开这篇《如何使用运行时指定的类型创建元素数组》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我正在尝试创建一个仅在运行时才知道类型的元素数组(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 不是类型

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


解决方案


给定元素类型 v 的值,获取切片的类型:

slicetype := reflect.sliceof(reflect.typeof(v))

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

slice:= reflect.makeslice(slicetype, 10, 10)

根据您正在执行的操作,您可能希望通过在reflect.value上调用interface()来获取实际的切片值:

s := slice.interface()

Run it on the playground

只需这样:

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

到这里,我们也就讲完了《如何使用运行时指定的类型创建元素数组》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>