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