从列表元素中获取值

huangapple go评论113阅读模式
英文:

Golang : Get the value from list element

问题

我正在为你翻译以下内容:

我在尝试从一个存储在列表中的结构体中获取值时遇到了恐慌错误。

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

我的做法是创建一个列表,并将结构体添加到列表中。
当我从列表中检索元素时,它是一个接口类型。
但是,如果我打印整个接口类型的值,它里面包含结构体的值。
所以我尝试获取结构体的一个值,但是却得到了恐慌错误。

这行代码运行良好。

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

代码如下:

  1. package main
  2. import (
  3. "container/list"
  4. "fmt"
  5. )
  6. func main() {
  7. type Player struct {
  8. name string
  9. year int
  10. }
  11. A := new(Player)
  12. A.name = "aaaa"
  13. A.year = 1990
  14. B := new(Player)
  15. B.name = "eeee"
  16. B.year = 2000
  17. C := new(Player)
  18. C.name = "dddd"
  19. C.year = 3000
  20. play := list.New()
  21. play.PushBack(A)
  22. play.PushBack(B)
  23. play.PushBack(C)
  24. A_elem := play.Back()
  25. //A_elem.Value is type Player struct
  26. fmt.Println(A_elem.Value) //&{dddd 3000}
  27. fmt.Println(A_elem.Value.(Player).year) //3000
  28. }

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

我该如何做?

提前感谢你。

英文:

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

I am getting error panic when I try to get the value from a struct which is from list.

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

What I did is make a list and add structures into the list.
When I retrieve the element from the list, it is in interface type.
But still if I print out the whole interface type value, it has structure values in it.
So I tried to get one value of structure but getting the panic error.

This line is working well.

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

code is here

  1. package main
  2. import (
  3. "container/list"
  4. "fmt"
  5. )
  6. func main() {
  7. type Player struct {
  8. name string
  9. year int
  10. }
  11. A := new(Player)
  12. A.name = "aaaa"
  13. A.year = 1990
  14. B := new(Player)
  15. B.name = "eeee"
  16. B.year = 2000
  17. C := new(Player)
  18. C.name = "dddd"
  19. C.year = 3000
  20. play := list.New()
  21. play.PushBack(A)
  22. play.PushBack(B)
  23. play.PushBack(C)
  24. A_elem := play.Back()
  25. //A_elem.Value is type Player struct
  26. fmt.Println(A_elem.Value) //&{dddd 3000}
  27. fmt.Println(A_elem.Value.(Player).year) //3000
  28. }

I want to save structures in the list and be able to retrieve the specific values from one of the structures that are saved in list.

How could I do it?

Thanks in advance.

答案1

得分: 5

具体问题是你尝试进行了错误的类型断言。

列表中保存的是*Player,但你试图将其类型断言为普通的Player结构体。

修复后的Playground链接

英文:

The precise problem is that you tried to do a bad type assertion.

The list holds *Player, but you tired to type assert that it is a plain Player struct.

Playground link with this fixed.

huangapple
  • 本文由 发表于 2013年11月20日 12:16:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/20087233.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定