在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發生了對象復制。