【问题标题】:How to pass type value to a variable with the type reflect.Type Golang如何将类型值传递给类型为 reflect.Type Golang 的变量
【发布时间】:2021-08-15 17:23:19
【问题描述】:

我需要创建 StructField,我需要在其中为 Type 字段传递 reflect.Type 值。我想将其他类型(如 reflect.Bool、reflect.Int)传递给将用于构造 StructField 的函数。我不能用下面的代码做到这一点

reflect.StructField{
            Name: strings.Title(v.Name),
            Type: reflect.Type(reflect.String),
            Tag:  reflect.StructTag(fmt.Sprintf(`xml:"%v,attr"`, v.Name)),
        }

因为它

Cannot convert an expression of the type 'Kind' to the type 'Type'

我将如何完成它?

【问题讨论】:

  • 要从reflect.Kind 值创建reflect.Type 值,您应该打开reflect.Kind 并根据情况初始化适当的reflect.Type。即switch k { case reflect.Int64: return reflect.TypeOf(int64(0)) ....
  • 或者你可以使用与上面提到的开关等效的地图:play.golang.org/p/BbK5A1SEHJN
  • 在 Go 中你不能传递类型。另请注意,reflect.Bool 不是 类型,它是一个值。 (不知道types.Bool,不知道types包你暗示什么)
  • @mkopriva 他可能指的是types.Bool
  • @icza 可能是的。

标签: go types reflection


【解决方案1】:

reflect.Type 是一个类型,所以表达式

reflect.Type(reflect.String)

应该是 conversion 类型。 reflect.String的类型是reflect.Kind,没有实现接口类型reflect.Type,所以转换无效。

代表stringreflect.Type 值为:

reflect.TypeOf("")

一般来说,任何(非接口)类型的reflect.Type 描述符都可以使用reflect.TypeOf() 函数获取,如果你有它的值:

var x int64
t := reflect.TypeOf(x) // Type descriptor of the type int64

如果您没有价值,这也是可能的。从类型化的nil 指针值开始,调用Type.Elem() 以获取指向的类型

t := reflect.TypeOf((*int64)(nil)).Elem()      // Type descriptor of type int64

t2 := reflect.TypeOf((*io.Reader)(nil)).Elem() // Type descriptor of io.Reader

【讨论】:

    猜你喜欢
    • 2013-08-15
    • 2017-10-29
    • 2016-09-24
    • 2022-01-23
    • 2023-03-08
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多