go - 如何查找两个 slice 是否引用同一内存?

标签 go slice

考虑这个例子:

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/

相关文章:

templates - 如果 nil block ,如何防止非 nil 值触发 golang 模板

iphone - 《水果忍者》游戏中的切片效果如何发挥作用?

performance - 平均超过具有不同切片的 2d numpy 数组

python - 我想对 ${ 和 } 之间的字符串进行切片

python - 使用 IndexSlice 通过 Pandas 过滤多索引数据帧

go - 如何将 slice 复制到自身

reflection - 在 Go 中应该避免使用反射吗?

go - 查找按最佳匹配排序的所有元素

dictionary - 落在引用/指针上的类型断言

go - 如何访问gohtml中 slice 结构内的结构元素?