阅读量:2
在Go语言中,要检测对象复制是否发生,可以使用reflect包中的DeepEqual函数来比较两个对象是否相同。以下是一个简单的示例代码:
package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p1 := Person{Name: "Alice", Age: 20} p2 := Person{Name: "Bob", Age: 30} // 复制p1到p3 p3 := p1 // 检测p1和p2是否相同 if reflect.DeepEqual(p1, p2) { fmt.Println("p1 and p2 are equal") } else { fmt.Println("p1 and p2 are not equal") } // 检测p1和p3是否相同 if reflect.DeepEqual(p1, p3) { fmt.Println("p1 and p3 are equal") } else { fmt.Println("p1 and p3 are not equal") } }
输出结果为:
p1 and p2 are not equal p1 and p3 are equal
在这个示例中,我们创建了一个Person结构体,并创建了p1和p2两个实例。然后,我们使用p3 := p1
将p1复制到p3。通过使用reflect包中的DeepEqual函数,我们可以比较两个对象是否相同。在这里,我们使用DeepEqual函数来比较p1和p2、以及p1和p3是否相同。根据输出结果,我们可以看到p1和p2不相同,而p1和p3相同。这说明p1和p2没有发生对象复制,而p1和p3发生了对象复制。