关于golang:GOreflect深度比较

5次阅读

共计 744 个字符,预计需要花费 2 分钟才能阅读完成。

反射是指在程序运行期对程序自身进行拜访和批改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行局部。在运行程序时,程序无奈获取本身的信息。

反对反射的语言能够在程序编译期将变量的反射信息,如字段名称、类型信息、构造体信息等整合到可执行文件中,并给程序提供接口拜访反射信息,这样就能够在程序运行期获取类型的反射信息,并且有能力批改它们。

Go 程序在运行期应用 reflect 包拜访程序的反射信息。

深度比拟:reflect.DeepEqual()
当咱们简单一个对象时,这个对象能够是内建数据类型,数组,构造体,map……咱们在复制构造体的时候,当咱们须要比拟两个构造体中的数据是否雷同时,咱们须要应用深度比拟,而不是只是简略地做浅度比拟。这里须要应用到反射 reflect.DeepEqual(),上面是几个示例

import (
    "fmt"
    "reflect"
)

func main() {v1 := data{}
    v2 := data{}
    fmt.Println("v1 == v2:",reflect.DeepEqual(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
}

参考资料:
Go 语言反射

正文完
 0