亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法指定進入 Go 列表的類型?

有沒有辦法指定進入 Go 列表的類型?

Go
一只甜甜圈 2022-10-31 17:20:49
有沒有辦法指定進入 Go 列表的類型?我是 Go 新手,我從 Google 搜索中看到的大部分內容都提到了切片,我什至想問這個問題。我堅持使用帶有列表的代碼,無法修改為切片。文檔提到列表使用元素的接口。我問是因為我寫了這段代碼:a := list.New() a.PushBack(x)并從運行我的文件的代碼中得到這個錯誤。panic: interface conversion: interface {} is int, not fileA.TypeA我的直覺是創建一個只接受fileA.TypeA但如果有其他方法可以解決此問題的建議。
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

我猜當您從列表中讀取數據時,您使用錯誤的類型來轉換數據。


例如。


package main


import (

    "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 main


import (

    "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)

    }

}


查看完整回答
反對 回復 2022-10-31
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號