跳至主要内容

[pkg] reflect

此篇為各筆記之整理,非原創內容,資料來源可見下方連結與文後參考資料:

透過 reflection 讓你可以在 runtime 時檢驗變數的型別,並且建立、修改某一變數、函式或 structs。reflection 在 Go 中主要圍繞三個概念:Types、Kinds 和 Values

// 檢視變數型別
varType := reflect.TypeOf(foo)

深度比較(DeepEqual)

reflect.DeepEqual

在 Go 中提供 reflect.DeepEqual 這個方法能夠檢驗兩個變數是否完全相同。不同型別在檢驗時的判斷標準略有不同,詳細說明須參考官方文件。

// 程式來源:https://coolshell.cn/articles/21128.html

func main() {
v1 := data{}
v2 := data{}
fmt.Println("v1 == v2:",reflect.DeepFEqual(v1,v2))
//prints: v1 == v2: true

m1 := map[string]string{"one": "a","two": "b"}
m2 := map[string]string{"two": "b", "one": "a"}
fmt.Println("m1 == m2:",reflect.DeepEqual(m1, m2))
//prints: m1 == m2: true

s1 := []int{1, 2, 3}
s2 := []int{1, 2, 3}
fmt.Println("s1 == s2:",reflect.DeepEqual(s1, s2))
//prints: s1 == s2: true
}