首頁 >後端開發 >Golang >Go Channels 可以處理多種資料類型嗎?

Go Channels 可以處理多種資料類型嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 13:55:30291瀏覽

Can Go Channels Handle Multiple Data Types?

Go 中類型不可知的通道

問題:

問題:

在Go 中,是否可以透過單一通道發送多種類型的資料?

範例:

以下程式碼嘗試透過通道傳送不同類型:http://play.golang。 org/p/7p2Bd6b0QT.

答案:
greet := make(chan pet)

是的,可以在 Go 中建立類型不可知的通道。若要透過通道傳送多種類型,請使用:

透過此修改,您可以傳送實作 pet 介面的任何類型。

發送通用資料:

如果需要發送完全通用的數據,請建立chan interface{} 類型的通道,並使用反射來確定接收到的資料類型。

ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}()

ch <- "this is it"

範例:

使用型式開關:
p := <-ch
switch p := p.(type) {
case string:
    fmt.Printf("Got a string %q", p)
default:
    fmt.Printf("Type of p is %T. Value %v", p, p)
}
作為反射的替代方案,您可以將類型開關與select 語句一起使用,如下所示:

以上是Go Channels 可以處理多種資料類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn