1

http://play.golang.org/p/TE02wFCprM

当我尝试从列表中的结构中获取值时,我遇到了错误恐慌。

   fmt.Println(A_elem.Value.(Player).year) //3000

我所做的是制作一个列表并将结构添加到列表中。当我从列表中检索元素时,它是接口类型。但是如果我打印出整个接口类型值,它仍然有结构值。所以我试图得到一个结构值,但得到了恐慌错误。

这条线路运行良好。

   fmt.Println(A_elem.Value)                    //&{dddd 3000}

代码在这里

package main

import (
  "container/list"
  "fmt"
)

func main() {

  type Player struct {
    name      string
    year   int
  }
  A := new(Player)
  A.name = "aaaa"
  A.year = 1990

  B := new(Player)
  B.name = "eeee"
  B.year = 2000

  C := new(Player)
  C.name = "dddd"
  C.year = 3000

  play := list.New()
  play.PushBack(A)
  play.PushBack(B)
  play.PushBack(C)

  A_elem := play.Back()

  //A_elem.Value is type Player struct
  fmt.Println(A_elem.Value)                    //&{dddd 3000}
  fmt.Println(A_elem.Value.(Player).year) //3000
}

我想将结构保存在列表中,并能够从列表中保存的结构之一中检索特定值。

我怎么能做到?

提前致谢。

4

1 回答 1

4

确切的问题是你试图做一个错误的类型断言。

该列表包含*Player,但是您厌倦了键入断言它是一个普通的Player结构。

与此固定的游乐场链接。

于 2013-11-20T06:48:04.533 回答