考虑这个例子:
sliceA := make([]byte, 10)
sliceB := make([]byte, 10)
// sliceA and sliceB are referencing different memory,
// witch eventually may contain same data
sliceC := sliceA[:]
// sclieC references same memory as sliceA
sliceD := sliceA[1:2]; sliceE := sliceA[4:5]
// assert that sliceD and sliceE share same block of memory
有什么方法可以检查 2 个 slice 是否引用(或不引用)同一内存?
编辑
我要比较的 slice 可能不指向底层内存块的同一段。
最佳答案
您可以通过导入 "reflect"
来测试地址:
same := reflect.ValueOf(sliceA).Pointer() == reflect.ValueOf(sliceC).Pointer()
Example :
package main
import (
"fmt"
"reflect"
)
func main() {
sliceA := make([]byte, 10)
sliceC := sliceA[1:]
sliceD := sliceA[1:]
fmt.Println(reflect.ValueOf(sliceC).Pointer() == reflect.ValueOf(sliceD).Pointer())
}
这会测试 slice 的开始位置,而不仅仅是底层数组。
关于go - 如何查找两个 slice 是否引用同一内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838794/