Reflection

反射(Reflection)是探知資料自身結構的一種能力,不同的語言提供不同的反射機制

範例

package main

import (
	"fmt"
	"reflect"
)

type Member struct {
	id   int
	name string
	age  int
}

func main() {
	var myInt int = 230
	fmt.Println(reflect.TypeOf(myInt))  //output int
	fmt.Println(reflect.ValueOf(myInt)) //output 230
	fmt.Println(reflect.TypeOf(myInt).Size()) //8
	member := Member{1, "Adam", 100}
	fmt.Println(reflect.TypeOf(member))  //output main.Member  //取得所有元素
	fmt.Println(reflect.ValueOf(member)) //output {1 Adam 100}/獲得值
	//TODO https://openhome.cc/Gossip/Go/Reflect.html 資料的 Kind NumField()
	//反射(Reflection)是探知資料自身結構的一種能力,不同的語言提供不同的反射機制
}

深度相等判斷

來自reflect包的DeepEqual函數

  • 可以支持任意的數據類型

  • 但nil值的map和非nil值但是空的map視作不相等,同樣nil值的slice 和非nil但是空的slice也是。

  • 雖然方便好用但比遍巡比較效率差

Last updated