如何在循环中访问列表中的结构字段

Vol*_*il3 0 struct go

struct在列表中插入一个变量。我能够检索循环中插入的项目,但不能检索单个值。我收到错误:

e.Value.name undefined (type interface {} is interface with no methods)
Run Code Online (Sandbox Code Playgroud)

代码如下:

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)
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 5

container/list.List不是通用的,它适用于interface{}. 尝试使用[]*Itemor类型的切片[]Item,这样你就不会遇到这个问题。

如果必须使用list.List,则可以使用类型断言

fmt.Println(e.Value.(Item).name)
Run Code Online (Sandbox Code Playgroud)

使用切片它可能如下所示:

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

for _, v := range queue {
    fmt.Println(v.name)
}
Run Code Online (Sandbox Code Playgroud)

但是请注意,append()附加到切片的末尾,因此它不等同于List.PushFront().