登录
首页 >  Golang >  Go问答

golang中如何通过代码动态创建结构体数组

来源:stackoverflow

时间:2024-03-23 17:48:20 268浏览 收藏

在 Go 语言中,由于其编译时静态类型特性,创建动态结构体数组的尝试会受限。尝试使用反射来创建数组时,会遇到“t 不是类型”错误。具体而言,Go 不支持泛型,无法将变量直接用作类型,且结构体字段的类型限制为 []interface{},导致无法分配其他类型(如 []string)给该字段。

问题内容

我尝试创建一个接受任何结构值的通用函数并创建该结构类型的数组。这是我尝试过的代码。但我收到错误“t 不是类型”。我该如何实现这个。

type RegAppDB struct {
    nm   string
    data []interface{}
}

func CreateRegTable(tbl string, rec interface{}) RegAppDB {
    t := reflect.TypeOf(rec)
    fmt.Println(t)
    return RegAppDB{"log", []t}
}

解决方案


Go 不支持泛型,任何类似的尝试都不会成功。根据您的具体情况,存在几个关键问题:

  • 您不能将变量用作类型。 Go 是编译时静态类型的,因此在运行时获取类型信息的任何操作(即 reflect.TypeOf)发生得太晚,无法使用您尝试执行的方式。
  • 同样重要的是,您的结构体字段的类型为 []interface{},这意味着您可以用于该字段的唯一类型是 []interface{}。例如,[]string 是一种不同的类型,不能分配给该字段。

好了,本文到此结束,带大家了解了《golang中如何通过代码动态创建结构体数组》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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