反射的使用示例

反射 reflection

  • 通過反射可以動態的調用方法
  • 反射可以通過TypeOfValueOf函數從接口中獲取目標對象信息
  • 利用反射修改對象狀態
  • 反射會將匿名字段作爲獨立字段

通過反射獲取對象的類型和值

示例如下:

package main

import (
	"fmt"
	"reflect"
)

type User struct {
	Id int
	Name string
	Age int
}

func (u User) Hello(){
	fmt.Println("Hello World")
}

//參數o : 可以接收任何類型
func Info(o interface{}){
	//獲取參數o的類型
	t:= reflect.TypeOf(o)
	//打印類型的名稱
	fmt.Printf("Type : %v\n", t.Name())

	v := reflect.ValueOf(o)
	fmt.Println("Fields:")

	//遍歷類型的字段
	for i:=0;i<t.NumField();i++{
		//根據索引取得字段
		f := t.Field(i)
		//取出字段對應的值
		val := v.Field(i).Interface()
		fmt.Printf("%5s: %v = %v\n",
			f.Name, f.Type, val)
	}
}

func main() {
	u:= User{1,"Jack",22}
	Info(u)
}

打印結果:

Type : User
Fields:
   Id: int = 1
 Name: string = Jack
  Age: int = 22
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章