英文:
How to pass type value to a variable with the type reflect.Type Golang
问题
我需要创建一个StructField,在其中需要为Type字段传递reflect.Type值。我想要在用于构建StructField的函数中传递其他类型,比如reflect.Bool、reflect.Int。但是我无法使用下面的代码实现这一点:
reflect.StructField{
Name: strings.Title(v.Name),
Type: reflect.Type(reflect.String),
Tag: reflect.StructTag(fmt.Sprintf(`xml:"%v,attr"`, v.Name)),
}
因为它会报错:
无法将类型为'Kind'的表达式转换为类型'Type'
我该如何实现这个目标呢?
英文:
I need to create StructField, in which I need to pass reflect.Type value for the Type field. I would like to pass other types like reflect.Bool, reflect.Int to function which will be used in the construction of StructField. I cannot do this with the code below
reflect.StructField{
Name: strings.Title(v.Name),
Type: reflect.Type(reflect.String),
Tag: reflect.StructTag(fmt.Sprintf(`xml:"%v,attr"`, v.Name)),
}
Because it
Cannot convert an expression of the type 'Kind' to the type 'Type'
How would I accomplish it?
答案1
得分: 5
reflect.Type
是一个类型,因此表达式
reflect.Type(reflect.String)
将是一个类型转换。reflect.String
的类型是 reflect.Kind
,它不实现接口类型 reflect.Type
,所以这个转换是无效的。
表示 string
的 reflect.Type
值是:
reflect.TypeOf("")
通常,如果你有一个值,可以使用 reflect.TypeOf()
函数获取任何(非接口)类型的 reflect.Type
描述符:
var x int64
t := reflect.TypeOf(x) // 类型 int64 的类型描述符
如果没有值,也可以从一个有类型的 nil
指针值开始,然后调用 Type.Elem()
来获取指向的类型:
t := reflect.TypeOf((*int64)(nil)).Elem() // 类型 int64 的类型描述符
t2 := reflect.TypeOf((*io.Reader)(nil)).Elem() // 类型 io.Reader 的类型描述符
英文:
reflect.Type
is a type, and so the expression
reflect.Type(reflect.String)
Would be a type conversion. Type of reflect.String
is reflect.Kind
which does not implement the interface type reflect.Type
, so the conversion is invalid.
The reflect.Type
value representing string
is:
reflect.TypeOf("")
Generally the reflect.Type
descriptor of any (non-interface) type can be acquired using the reflect.TypeOf()
function if you have a value of it:
var x int64
t := reflect.TypeOf(x) // Type descriptor of the type int64
It's also possible if you don't have a value. Start from a typed nil
pointer value, and call Type.Elem()
to get the pointed type:
t := reflect.TypeOf((*int64)(nil)).Elem() // Type descriptor of type int64
t2 := reflect.TypeOf((*io.Reader)(nil)).Elem() // Type descriptor of io.Reader
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论