【发布时间】: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