判断变量类型
案例: 获取结构体里, 每个字段的类型type, 名字name, 值value
package main
import (
"fmt"
"reflect"
)
type User struct {
Id int
Name string
}
func (u *User) Call() {
fmt.Println("user is called ..")
fmt.Printf("%v\n", u)
}
func ToUser(input interface{}) {
inputType := reflect.TypeOf(input)
fmt.Println(inputType.Name())
inputValue := reflect.ValueOf(input)
fmt.Println(inputValue)
// 获取结构体里的字段信息
for i := 0; i < inputType.NumField(); i++ {
field := inputType.Field(i)
value := inputValue.Field(i).Interface()
fmt.Printf("%s: %v = %v \n", field.Name, field.Type, value)
}
// 获取结构体里的方法名
fmt.Println(inputType.NumMethod())
for i := 0; i < inputType.NumMethod(); i++ {
m := inputType.Method(i)
fmt.Printf("%s: 方法, %v: 类型\n", m.Name, m.Type)
}
}
func main() {
user := User{1, "chf"}
ToUser(user)
}