GOreflect深度比较

Posted 一曲长歌一剑天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GOreflect深度比较相关的知识,希望对你有一定的参考价值。

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

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

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语言反射

以上是关于GOreflect深度比较的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES之“深度测试”与“模板测试”的使用流程

在PaddlePaddle中的Notebook代码片段

深度测试

比较 C# 中的字符串片段并从集合中删除项目

模板测试

在执行深度预测试的同时写入 gl_FragDepth