2009-11-13 4 views
2

나는 모든 것이 잘 작동이동 중에 (일반) 벡터를 사용하려면 어떻게해야합니까?

store := vector.New(200); 
... 
rbuf := make([]byte, size); 
... 
store.Push(rbuf); 

바이트의 배열 (가변 크기)를 저장하는 벡터 형식을 사용하고,하지만 난 값을 검색 할 때, 컴파일러는 I 타입 주장을 사용할 필요가 알려줍니다. 그래서 나는 사람들을에 추가하고,

for i := 0; i < store.Len(); i++ { 
    el := store.At(i).([]byte); 
... 

을 시도하지만이 프로그램을 실행할 때 그것은 밖으로 보석금 :

interface is nil, not []uint8 
throw: interface conversion 

내가 빈 요소 인터페이스 변환/'캐스팅'할 수있는 방법 어떤 생각이 벡터가 사용하는 그 다음에 사용하기 원하는 실제 [] 바이트 배열에 데이터를 저장 하시겠습니까?


업데이트 (Go1는) : 벡터 패키지는 2011-10-18에 제거되었습니다.

+0

만약 당신이 그들을 밀어 때 모든 rbufs 실제로 바이트 배열 궁금해? 그것을 캐스팅하기 전에 "print reflect.Typeof (store.At (i)). String()"형식으로 쿼리 할 수 ​​있습니까? 아마도 intvector의 구현을 살펴보면 다음과 같습니다. http://golang.org/src/pkg/container/vector/intvector.go (내게는 사용이 올바른 것 같습니다). – Suppressingfire

+0

결국 실제로 intVectors로 전환했습니다. 나는 UTF-8 문자열을 줄 바꿈으로 끝내고 rbufs는 나중에 문자열로 변환하기 위해 바이트를 저장한다. 그러나 int 배열을 문자열로 직접 변환 할 수 있다는 것을 알았 기 때문에 int에 해당 벡터를 넣고 'string (store.Data())'을 사용하여 문자열로 변환합니다. –

+0

예, 컨테이너/벡터가 마지막으로 종료되었습니다! 더 이상 컨테이너/벡터가 없습니다. – Codefor

답변

7

나를 위해 잘 작동합니다. 벡터의 처음 200 개 요소를 초기화 했습니까? 당신이하지 않으면 그들은 아마 당신의 오류의 원천이 될 수 없다는 것입니다.

package main 

import vector "container/vector" 
import "fmt" 

func main() { 
    vec := vector.New(0); 
    buf := make([]byte,10); 
    vec.Push(buf); 

    for i := 0; i < vec.Len(); i++ { 
    el := vec.At(i).([]byte); 
    fmt.Print(el,"\n"); 
    } 
} 
+0

네, 고마워요! 그랬어. 저는 인수가 고정 된 사전 설정이 아닌 자바 스타일의 '힌트'라고 가정했습니다 ... 그러나 일반적으로 이동 설명서는 간결합니다. 그리고 오류 메시지는 거의 대부분의 시간에 도움이되지 않습니다! –

+0

걱정할 필요가 없습니다. 무슨 일이 일어나는지 확실하지 않으면 $ GOROOT/src/pkg에있는 이동 모듈의 소스를 항상 확인하십시오. –

+1

컨테이너/벡터가 제거되었고 슬라이스 배열 래퍼로 대체되었습니다. –

관련 문제