a := []int{1,2,3,4,5,6}
b := a[1:len(a)-1]
fmt.Println(b) // -> [2 3 4 5]
我可以从6
获取b
:
c := b[:len(b)+1]
fmt.Println(c) // -> [2 3 4 5 6]
但我可以回复1
吗?
如果我尝试
c := b[-1:]
我得到了
无效的切片索引-1(索引必须是非负的)
如果我无法取回它,是否意味着它会被垃圾收集?
答案 0 :(得分:0)
不会进行垃圾回收:Go Slices: usage and internals
如果您阅读this answer,它会向您展示如何使用反射来获取底层数组,使用不安全和反射包可以从中恢复1。
s := []int{1, 2, 3, 4}
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
data := *(*[4]int)(unsafe.Pointer(hdr.Data))