从列表元素中获取值

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

Golang : Get the value from list element

问题

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

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

   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
}

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

我该如何做?

提前感谢你。

英文:

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.

   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.

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

code is here

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
}

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:

确定