duansha3771 2017-12-27 05:48
浏览 26
已采纳

我可以恢复从切片开始处切片的元素吗?

a := []int{1,2,3,4,5,6}
b := a[1:len(a)-1]
fmt.Println(b) // -> [2 3 4 5]

I can get the 6 back from b:

c := b[:len(b)+1]
fmt.Println(c) // -> [2 3 4 5 6]

But can I get the 1 back?

If I try

c := b[-1:]

I get

invalid slice index -1 (index must be non-negative)

If I can't get it back, does it mean it will be garbage collected?

  • 写回答

1条回答 默认 最新

  • duanmo5724 2017-12-27 06:07
    关注

    It will not be garbage collected:Go Slices: usage and internals

    If you read this answer it shows you how to use reflection to get the underlying array, from which 1 is recoverable using unsafe and reflect packages.

    s := []int{1, 2, 3, 4}
    hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
    data := *(*[4]int)(unsafe.Pointer(hdr.Data))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗