反射
反射:可以在运行时动态获取变量的相关信息,需要导入reflect包。
import ("reflect")
用法:
- reflect.TypeOf,获取变量的类型,返回reflect.Type类型
- reflect.ValueOf,获取变量的值,返回reflect.Value类型
- reflect.Value.Kind,获取变量的类别,返回一个常量
- reflect.Value.Interface(),转换成interface{}类型
fmt.Println(reflect.TypeOf(r.Student{
}))
fmt.Println(reflect.ValueOf(r.Student{
}))
fmt.Println(reflect.Value.Kind(reflect.ValueOf(r.Student{
})))
fmt.Println(reflect.Value.Interface(reflect.ValueOf(r.Student{
})))
reflect.Value.Kind()方法返回的常量:
const (
Invalid Kind = iota
Bool
Int
Int8
Int16
Int32
Int64
Uint
Uint8
Uint16
Uint32
Uint64
Uintptr
Float32
Float64
Complex64
Complex128
Array
Chan
Func
Interface
Map
Ptr
Slice
String
Struct
UnsafePointer
)
反射演练:
package main
import (
"fmt"
"reflect"
)
func main() {
var x float64 = 3.4
fmt.Println("type:", reflect.TypeOf(x))
v := reflect.ValueOf(x)
fmt.Println("value:"