在Go語言中,如果希望在從一個通道(channel)接收資料時設定超時,可以使用select
語句和time.After
函式。以下是一個示例程式碼,演示瞭如何實現這個功能:
package main import ( "fmt" "time" ) func main() { // 建立一個通道 ch := make(chan string) // 啟動一個goroutine,模擬資料生產,這裡延遲1秒 go func() { time.Sleep(1 * time.Second) ch <- "資料" }() // 設定超時時間 timeout := 500 * time.Millisecond // 使用select等待通道ch或超時 select { case data := <-ch: fmt.Println("接收到資料:", data) case <-time.After(timeout): fmt.Println("超時,未接收到資料") } }
在這個例子中,我們建立了一個通道ch
,並且在主goroutine中使用select
語句和time.After
函式設定了一個超時。如果在指定的超時時間內從ch
接收到資料,則執行第一個case並列印接收到的資料。如果超過設定的超時時間仍未接收到資料,則執行time.After
對應的case,列印超時資訊。