猿问

有没有办法指定进入 Go 列表的类型?

有没有办法指定进入 Go 列表的类型?我是 Go 新手,我从 Google 搜索中看到的大部分内容都提到了切片,我什至想问这个问题。我坚持使用带有列表的代码,无法修改为切片。

文档提到列表使用元素的接口。

我问是因为我写了这段代码:

a := list.New()
a.PushBack(x)

并从运行我的文件的代码中得到这个错误。

panic: interface conversion: interface {} is int, not fileA.TypeA

我的直觉是创建一个只接受fileA.TypeA但如果有其他方法可以解决此问题的建议。


一只甜甜圈
浏览 102回答 1
1回答

胡说叔叔

我猜当您从列表中读取数据时,您使用错误的类型来转换数据。例如。package mainimport (    "container/list"    "fmt")type User struct {    name string}func main() {    l := list.New()    l.PushBack(User{name: "Jack"})    l.PushBack(2)    for e := l.Front(); e != nil; e = e.Next() {        fmt.Println(e.Value.(int))    }}// panic: interface conversion: interface {} is main.User, not int列表有 User 和 int 两种类型,但是如果你只使用 int 来转换列表中的所有数据,它会抛出 panic 错误。您需要使用正确的类型进行转换。然后你可以像下面的例子那样检测类型。package mainimport (    "container/list"    "fmt")type User struct {    name string}func do(i interface{}) {    switch v := i.(type) {    case int:        fmt.Printf("This type is int: %d", v)    case User:        fmt.Printf("This is User type: %#v\n", v)    default:        fmt.Printf("I don't know about type %T!\n", v)    }}func main() {    l := list.New()    l.PushBack(User{name: "Jack"})    l.PushBack(2)    l.PushBack(3)    for e := l.Front(); e != nil; e = e.Next() {        do(e.Value)    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答