日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言channel超時機制

Go語言沒有提供直接的超時處理機制,所謂超時可以理解為當我們上網瀏覽一些網站時,如果一段時間之后不作操作,就需要重新登錄。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于網站設計、成都做網站、嘉定網絡推廣、小程序開發(fā)、嘉定網絡營銷、嘉定企業(yè)策劃、嘉定品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供嘉定建站搭建服務,24小時服務熱線:18982081108,官方網址:www.cdcxhl.com

那么我們應該如何實現(xiàn)這一功能呢,這時就可以使用 select 來設置超時。

雖然 select 機制不是專門為超時而設計的,卻能很方便的解決超時問題,因為 select 的特點是只要其中有一個 case 已經完成,程序就會繼續(xù)往下執(zhí)行,而不會考慮其他 case 的情況。

超時機制本身雖然也會帶來一些問題,比如在運行比較快的機器或者高速的網絡上運行正常的程序,到了慢速的機器或者網絡上運行就會出問題,從而出現(xiàn)結果不一致的現(xiàn)象,但從根本上來說,解決死鎖問題的價值要遠大于所帶來的問題。

select 的用法與 switch 語言非常類似,由 select 開始一個新的選擇塊,每個選擇條件由 case 語句來描述。

與 switch 語句相比,select 有比較多的限制,其中最大的一條限制就是每個 case 語句里必須是一個 IO 操作,大致的結構如下:

select {
    case <-chan1:
    // 如果chan1成功讀到數(shù)據(jù),則進行該case處理語句
    case chan2 <- 1:
    // 如果成功向chan2寫入數(shù)據(jù),則進行該case處理語句
    default:
    // 如果上面都沒有成功,則進入default處理流程
}

在一個 select 語句中,Go語言會按順序從頭至尾評估每一個發(fā)送和接收的語句。

如果其中的任意一語句可以繼續(xù)執(zhí)行(即沒有被阻塞),那么就從那些可以執(zhí)行的語句中任意選擇一條來使用。

如果沒有任意一條語句可以執(zhí)行(即所有的通道都被阻塞),那么有如下兩種可能的情況:

  • 如果給出了 default 語句,那么就會執(zhí)行 default 語句,同時程序的執(zhí)行會從 select 語句后的語句中恢復;
  • 如果沒有 default 語句,那么 select 語句將被阻塞,直到至少有一個通信可以進行下去。

示例代碼如下所示:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)
    quit := make(chan bool)

    //新開一個協(xié)程
    go func() {
        for {
            select {
            case num := <-ch:
                fmt.Println("num = ", num)
            case <-time.After(3 * time.Second):
                fmt.Println("超時")
                quit <- true
            }
        }

    }() //別忘了()

    for i := 0; i < 5; i++ {
        ch <- i
        time.Sleep(time.Second)
    }

    <-quit
    fmt.Println("程序結束")
}

運行結果如下:

num =  0
num =  1
num =  2
num =  3
num =  4
超時
程序結束


當前題目:創(chuàng)新互聯(lián)GO教程:Go語言channel超時機制
標題URL:http://www.dlmjj.cn/article/djssgdd.html