我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)
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().