go 利用反射判断类型
时间: 2023-09-19 20:05:55 浏览: 32
可以使用反射包中的TypeOf函数获取一个值的类型,然后使用Kind方法判断其具体的类型。示例代码如下:
```
package main
import (
"fmt"
"reflect"
)
func checkType(i interface{}) {
t := reflect.TypeOf(i)
switch t.Kind() {
case reflect.Int:
fmt.Println("Type is int")
case reflect.String:
fmt.Println("Type is string")
case reflect.Float64:
fmt.Println("Type is float64")
default:
fmt.Println("Unknown type")
}
}
func main() {
checkType(1)
checkType("hello")
checkType(1.2345)
}
```
输出结果为:
```
Type is int
Type is string
Type is float64
```
相关问题
反射判断字段类型
要反射判断一个字段的类型,可以使用反射包中的`TypeOf()`和`Kind()`方法。例如,假设我们有一个结构体`Person`,其中有一个字段`Age`,我们可以使用以下代码来判断`Age`字段的类型:
```go
package main
import (
"fmt"
"reflect"
)
type Person struct {
Age int
}
func main() {
p := Person{Age: 30}
t := reflect.TypeOf(p)
field, _ := t.FieldByName("Age")
fmt.Println(field.Type.Kind())
}
```
输出结果为`int`,说明`Age`字段的类型为`int`。在代码中,我们首先使用`reflect.TypeOf()`方法获取`Person`结构体的类型,然后使用`FieldByName()`方法获取`Age`字段的反射对象,最后使用`Kind()`方法获取字段的类型。需要注意的是,如果字段不存在或者出现了错误,`FieldByName()`方法会返回一个零值和一个错误,需要进行错误处理。
golang 利用反射获取结构体的key
可以使用反射包中的Type和Value方法获取结构体的信息,例如:
```go
type Person struct {
Name string
Age int
}
func main() {
person := Person{"John", 30}
t := reflect.TypeOf(person)
v := reflect.ValueOf(person)
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
fmt.Printf("%s: %v\n", field.Name, value)
}
}
```
在上述代码中,我们首先定义了一个Person结构体,然后使用反射包中的TypeOf和ValueOf方法获取结构体的类型和值。接着,我们通过循环遍历结构体的字段,使用Field方法获取每个字段的信息,包括字段名(Name)和字段值(Value)。
输出结果为:
```
Name: John
Age: 30
```
这样就可以利用反射获取结构体的key了。