英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论