go语言的reflect可以动态的获取变量的数据及其类型信息。
其中最常用的两个type是 reflect.Value用来存储value, reflect.Type用来存储变量类型
具体用法可以参考下面的例子
package main
import (
"reflect"
"fmt"
"os"
)
type a struct{
X int
Y float64
Z string
}
func main(){
A := a{100, 100.11, "struct a"}
var r reflect.Value
arguments := os.Args
r = reflect.ValueOf(&A).Elem()
iType := r.Type()
fmt.Printf("i Type: %s\n", iType)
fmt.Printf("The %d fields of %s are:\n", r.NumField(), iType)
fmt.Printf("The %d fields of %s are:\n", iType.NumField(), iType)
for i := 0; i < r.NumField(); i++{
fmt.Printf("Field name: %s", iType.Field(i).Name)
fmt.Printf(" with type: %s", r.Field(i).Type())
fmt.Printf(" and value: %v\n", r.Field(i).Interface())
}
}
网友评论