go 语言 == 引用判断和对象判断的区别

发布时间 2023-10-17 16:04:41作者: 藏道书院

引用判断:只是判断内存地址是不是一样的。

a := []int{1, 2, 3}
b := a
c := make([]int, len(a))
copy(c, a)

fmt.Println(a == b) // true,因为它们引用相同的内存地址
fmt.Println(a == c) // true,因为它们引用相同的内存地址

对象判断:会判断内存地址、判断数据结构、判断属性的值。

type Person struct {
    Name string
    Age  int
}

p1 := Person{"Alice", 25}
p2 := Person{"Alice", 25}
p3 := Person{"Bob", 30}

// 判断对象
fmt.Println(reflect.DeepEqual(p1, p2)) // true,内容相同
fmt.Println(reflect.DeepEqual(p1, p3)) // false,内容不同

如果 Person 里面的属性有引用类型的,就会按照引用判断。