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

내가 얻을 수있는 다시 6b에서 :슬라이스 시작 부분에서 잘라낸 요소를 복구 할 수 있습니까?

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

하지만 다시 1을받을 수 있나요?

내가

c := b[-1:] 

시도 나는 그것을 다시 얻을 수없는 경우

유효하지 않은 슬라이스 인덱스 -1

(인덱스는 음수가 아닌 수 있어야합니다) 얻는 경우에, 쓰레기 수거된다는 뜻인가요?

+0

실제로 원본 슬라이스의 공간을 원할 경우 실제로는 원본 슬라이스에 대한 참조 만 유지하면됩니다. – JimB

답변

0

는 쓰레기 수집되지 않습니다 : 당신이 this answer을 읽는다면 당신이 어떻게 하나가 안전하지 않은 사용 및 패키지를 반영 복구 할 수있는 기본 배열을 얻기 위해 반사를 사용하는 방법을 보여줍니다 Go Slices: usage and internals

.

s := []int{1, 2, 3, 4} 
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 
data := *(*[4]int)(unsafe.Pointer(hdr.Data)) 
+0

이 대답을 마지 못해 받아들입니다. :) – AndreKR