標籤:結構體 etc 根據 tail port 對象 類型 art type
go語言---reflect78902953
一.reflect的使用:
import ( "fmt" "reflect") type Student struct { Name string Age int} func main() { var x int = 1 student := Student{Name: "zs", Age: 26} //1.reflect.TypeOf() 傳回值Type類型 fmt.Println("x type: ", reflect.TypeOf(x)) fmt.Println("student type: ", reflect.TypeOf(student)) //2.reflect.ValueOf() 傳回值Value類型 fmt.Println("x value: ", reflect.ValueOf(x)) fmt.Println("student value: ", reflect.ValueOf(student)) //3.value.Kind() 傳回值Kind類型 注意與Type的不同 fmt.Println("x kind: ", reflect.ValueOf(x).Kind()) fmt.Println("student kind: ", reflect.ValueOf(student).Kind()) //4.修改反射對象,修改反射對象的前提條件是其值是可設定的 var a int = 10 v := reflect.ValueOf(&a) e := v.Elem() e.SetInt(15) fmt.Println(e.CanSet()) //根據CanSet()傳回值可確定是否可以設定 fmt.Println(a) // 根據結果我們可知 a=15 //5.遍曆結構體欄位內容 s := reflect.ValueOf(&student).Elem() studentType := s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d %s %s = %v\n", i, studentType.Field(i).Name, f.Type(), f.Interface()) }}
輸出結果:
x type: int
student type: main.Student
x value: 1
student value: {zs 26}
x kind: int
student kind: struct
true
15
0 Name string = zs
1 Age int = 26
go語言---reflect