1. 程式人生 > >go語言中反射機理詳解

go語言中反射機理詳解

package main

import (
“fmt”
“reflect”
)

type User struct {
Id int
Name string
Age int
}

type Manager struct {
User //反射會將匿名欄位作為一個獨立欄位來處理
Title string
}

func main() {
m := Manager{User: User{1, “Jack”, 12}, Title: “123”}
t := reflect.TypeOf(m)
fmt.Printf(“%#v\n”, t.Field(0)) //#號會將reflect的struct的詳情頁打印出來,可以看出來這是一個匿名欄位
fmt.Printf(“%#v \n”, t.FieldByIndex([]int{0, 0})) //此時 我們就可以將User當中的ID取出來,這裡面需要傳進方法中的是一個int型別的slice,User相對於manager索引是0,id相對於User索引也是0
fmt.Printf(“%v \n”, t.FieldByIndex([]int{0, 1}))
v := reflect.ValueOf(m)
fmt.Printf(“%#v\n”, v.Field(0))
}