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中文網其他相關文章!