Как я могу использовать (универсальный) вектор в го? - PullRequest
2 голосов
/ 13 ноября 2009

Я использую тип Vector для хранения массивов байтов (переменных размеров)

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

Это все работает хорошо, но когда я пытаюсь получить значения, компилятор говорит мне, что мне нужно использовать утверждения типа. Я добавляю их и пытаюсь

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

Но когда я запускаю это, оно выдает с:

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

Есть идеи, как я могу «преобразовать» / преобразовать из пустого интерфейса Element, который Vector использует для хранения своих данных в фактическом байтовом массиве [], который я потом хочу использовать?


Обновление (Go1): Векторный пакет был удален 2011-10-18 .

1 Ответ

7 голосов
/ 13 ноября 2009

Это прекрасно работает для меня. Вы инициализировали первые 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");
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...