[pkg] reflect
此篇為各筆記之整理,非原創內容,資料來源可見下方連結與文後參考資料:
- reflect @ golang
- Learning to Use Go Reflection
透過 reflection 讓你可以在 runtime 時檢驗變數的型別,並且建立、修改某一變數、函式或 structs。reflection 在 Go 中主要圍繞三個概念:Types、Kinds 和 Values。
// 檢視變數型別
varType := reflect.TypeOf(foo)
深度比較(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
}