代码:
package main
import (
"fmt"
"reflect"
)
type User struct {
Id int
Name string
Age int
}
func (u User) Hello() {
fmt.Println("Hello World")
}
func main() {
/*
基本类型
*/
var x float64 = 1.1
//TypeOf
fmt.Println("-----------------TypeOf------------------")
fmt.Println("reflect.TypeOf(x):", reflect.TypeOf(x))
fmt.Println("reflect.TypeOf(x).Kind():", reflect.TypeOf(x).Kind())
//ValueOf
fmt.Println("-----------------ValueOf-----------------")
fmt.Println("reflect.ValueOf(x):", reflect.ValueOf(x))
fmt.Println("reflect.ValueOf(x).Type():", reflect.ValueOf(x).Type())
fmt.Println("reflect.ValueOf(x).Canset():", reflect.ValueOf(x).CanSet())
fmt.Println("reflect.ValueOf(&x).Elem():", reflect.ValueOf(&x).Elem())
fmt.Println("reflect.ValueOf(&x).Elem().CanSet():", reflect.ValueOf(&x).Elem().CanSet())
reflect.ValueOf(&x).Elem().SetFloat(1.21)
fmt.Println("reflect.ValueOf(&x).Elem().Interface():", reflect.ValueOf(&x).Elem().Interface())
/*
struct
*/
fmt.Println("-----------------struct-----------------")
u := User{1, "ok", 12}
fmt.Println(reflect.TypeOf(u).Kind() == reflect.Struct)
for i := 0; i < reflect.TypeOf(u).NumField(); i++ {
fmt.Printf("字段: %6s\n", reflect.TypeOf(u).Field(i))
fmt.Printf("字段名: %6s | 字段类型: %v | 字段值: %v\n", reflect.TypeOf(u).Field(i).Name, reflect.TypeOf(u).Field(i).Type, reflect.ValueOf(u).Field(i).Interface())
}
for i := 0; i < reflect.TypeOf(u).NumMethod(); i++ {
fmt.Printf("reflect.TypeOf(u).Method(i).Name: %6s\n reflect.TypeOf(u).Method(i).Type: %v\n", reflect.TypeOf(u).Method(i).Name, reflect.TypeOf(u).Method(i).Type)
}
}