Как получить доступ к структурным полям из списка в цикле - PullRequest
0 голосов
/ 05 марта 2020

Я вставляю переменную struct в список. Я могу получить этот вставленный элемент в l oop, но не индивидуальное значение. Я получаю сообщение об ошибке:

e.Value.name undefined (type interface {} is interface with no methods)

Код указан ниже:

type Item struct {
    name  string
    value string
}
queue := list.New()
per := Item{name: "name", value: "Adnan"}
queue.PushFront(per)

for e := queue.Front(); e != nil; e = e.Next() {
    fmt.Println(e.Value.name)
}

1 Ответ

5 голосов
/ 05 марта 2020

container/list.List не является универсальным c, оно работает с interface{}. Попробуйте использовать фрагмент типа []*Item или []Item, чтобы у вас не возникло этой проблемы.

Если вам необходимо использовать list.List, вы можете использовать утверждение типа :

fmt.Println(e.Value.(Item).name)

Используя фрагмент, он может выглядеть так:

var queue []Item
per := Item{name: "name", value: "Adnan"}
queue = append(queue, per)

for _, v := range queue {
    fmt.Println(v.name)
}

Обратите внимание, что append() добавляет к концу фрагмента, поэтому он не эквивалентен List.PushFront().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...