0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

當(dāng)channel關(guān)閉后再去讀取數(shù)據(jù)會(huì)出現(xiàn)啥情況

冬至配餃子 ? 來(lái)源:GoLang全棧 ? 作者:小錕哥哥 ? 2022-08-17 11:14 ? 次閱讀

一、正常的 channel

首先我們先來(lái)一段正常操作的代碼:

poYBAGL8W_2AcShBAAAtCLEMIdc627.png

這段代碼應(yīng)該非常熟悉,這樣寫(xiě)是否有問(wèn)題呢?

執(zhí)行后的結(jié)果:

poYBAGL8XA-ALuPyAAAfzJjckaI325.png

如果一個(gè) channel 不在某個(gè)協(xié)程里面關(guān)閉的話,我們的 for range 就會(huì)報(bào)死鎖的錯(cuò)誤。

二、關(guān)閉后再讀取

1、使用 for range 讀取關(guān)閉后的 channel

現(xiàn)在我們?cè)?for range 之前關(guān)閉下這個(gè) channel,看會(huì)出現(xiàn)啥情況:

pYYBAGL8XCGAa_6gAABCUPjPvWw471.png

這樣寫(xiě)代碼會(huì)出現(xiàn)啥問(wèn)題呢?

poYBAGL8XDWAC2AOAAATcC2lvLk581.png

啥錯(cuò)也沒(méi)有,正常的讀取。

2、直接獨(dú)立取值

下面我們換直接獨(dú)立取值的方式:

poYBAGL8XEiAFnr1AAAzJ2ZPpFc917.png

state 會(huì)返回是否取到了值,這段代碼的執(zhí)行結(jié)果是取到第一個(gè)值:

pYYBAGL8XFiAfedsAAANM8qHq90050.png

如果我們反復(fù)讀取呢?

pYYBAGL8XGmAKOJoAABOiTHv13M638.png

我前面讀取 3 次,把里面的數(shù)據(jù)讀取完畢后,再讀取得到就是零值了。

pYYBAGL8XICAPSEgAAAO5wQ1CgQ342.png

所以結(jié)論是:如果 channel 有元素還未讀,會(huì)正確讀出來(lái),哪怕他已經(jīng)關(guān)閉了。

三、往里面寫(xiě)值呢?

最后一起來(lái)看下,當(dāng) channel 關(guān)閉后,往里面寫(xiě)值會(huì)怎樣?

pYYBAGL8XJiAIHCgAAAgpEO8GC8725.png

這段代碼執(zhí)行后的結(jié)果:

pYYBAGL8XKqAZzgXAAAXHxdNrwY953.png

會(huì)報(bào) panic,具體原因我們可以看 go 的源碼,路徑為:src/runtime/chan.go

poYBAGL8XMSAP3QKAACmUgJdS7I575.png

你學(xué)廢了么?



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Channel
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    11819
  • go語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    158

    瀏覽量

    9053
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    aducm360采樣率大于200Hz以上時(shí),就會(huì)出現(xiàn)讀取數(shù)據(jù)錯(cuò)誤是為什么?怎么解決?

    問(wèn)題: 用該芯片采集8路的ad信號(hào),使用的是連續(xù)轉(zhuǎn)換模式,每次ad轉(zhuǎn)換完成進(jìn)入中斷函數(shù),在中斷里切換下個(gè)通道,依次采集各通道模擬量。但是當(dāng)ad的采樣率大于200Hz以上時(shí),就會(huì)出現(xiàn)讀取數(shù)據(jù)
    發(fā)表于 01-12 07:50

    使用ADS1256中出現(xiàn)重新上電會(huì)出現(xiàn)讀取AD值不一樣的情況,怎么解決?

    您好,我在使用ADS1256中出現(xiàn)重新上電會(huì)出現(xiàn)讀取AD值不一樣的情況:我這邊一直給一個(gè)恒定的電壓輸入,重復(fù)上電斷電讀取AD值的實(shí)驗(yàn),10
    發(fā)表于 12-13 09:34

    請(qǐng)問(wèn)AFE4400讀取數(shù)據(jù)什么時(shí)候才會(huì)出現(xiàn)0?

    我目前用的是AFE4400,讀取的是紅光、紅外光和去環(huán)境紅光,我想知道讀取數(shù)據(jù)什么時(shí)候才會(huì)出現(xiàn)0?隨著光照增強(qiáng),是不是接受到的數(shù)據(jù)會(huì)變得
    發(fā)表于 12-20 10:03

    串口通訊 不間斷的會(huì)出現(xiàn)數(shù)據(jù)中斷

    運(yùn)行時(shí)候數(shù)據(jù)接收是正常的,當(dāng)運(yùn)行一段時(shí)間會(huì)出現(xiàn)數(shù)據(jù)為0 跳變很大,會(huì)不間斷的出現(xiàn)這種情況。。怎么
    發(fā)表于 07-26 11:42

    mcuisp會(huì)出現(xiàn)芯片保護(hù)無(wú)法讀取情況是為什么?

    mcuisp會(huì)出現(xiàn)芯片保護(hù)無(wú)法讀取情況是為什么?
    發(fā)表于 12-03 07:46

    modbus通訊會(huì)出現(xiàn)讀取失敗是什么情況

    實(shí)際情況:4路modbus通訊和一路串口通訊。4路modbus都是使用的libmodbus協(xié)議棧,串口使用的serial_v1的驅(qū)動(dòng)。在實(shí)際使用中4路modbus都會(huì)出現(xiàn)讀取失敗的情況
    發(fā)表于 11-09 14:07

    當(dāng)變頻器將進(jìn)線缺相保護(hù)關(guān)閉,出現(xiàn)缺相運(yùn)行會(huì)出現(xiàn)什么情況

    當(dāng)變頻器將進(jìn)線缺相保護(hù)關(guān)閉,出現(xiàn)缺相運(yùn)行會(huì)出現(xiàn)什么情況?謝謝!
    發(fā)表于 12-18 07:19

    水泵為什么會(huì)出現(xiàn)燒電機(jī)的情況?

    2月15日周五水泵為什么會(huì)出現(xiàn)燒電機(jī)的情況?帶負(fù)荷啟動(dòng)可以造成電機(jī)損壞;實(shí)際使用揚(yáng)程低于泵銘牌揚(yáng)程太多
    的頭像 發(fā)表于 02-16 08:19 ?1.8w次閱讀

    不同的直流電機(jī)反接會(huì)出現(xiàn)什么情況

    直流電機(jī)有很多種,下面就分別介紹一下不同直流電機(jī)反接會(huì)出現(xiàn)什么情況
    的頭像 發(fā)表于 03-08 11:40 ?6645次閱讀

    兩個(gè)IGBT為什么會(huì)出現(xiàn)同時(shí)導(dǎo)通的情況呢?

    。 對(duì)三相電來(lái)說(shuō),就需要三個(gè)橋臂。以兩電平為例,每個(gè)橋臂上有兩個(gè)電力電子器件,比如IGBT。大致如下圖所示; 這兩個(gè)IGBT不能同時(shí)導(dǎo)通,否則就會(huì)出現(xiàn)短路的情況,從而對(duì)系統(tǒng)造成損害。 那為什么會(huì)出現(xiàn)同時(shí)導(dǎo)通的
    的頭像 發(fā)表于 01-13 16:28 ?7646次閱讀
    兩個(gè)IGBT為什么<b class='flag-5'>會(huì)出現(xiàn)</b>同時(shí)導(dǎo)通的<b class='flag-5'>情況</b>呢?

    螺桿式冷水機(jī)蒸發(fā)器出現(xiàn)故障會(huì)出現(xiàn)什么問(wèn)題

    使用螺桿式冷水機(jī)組時(shí)會(huì)出現(xiàn)各種狀況,其中蒸發(fā)器是重要的配件,當(dāng)出現(xiàn)故障就會(huì)影響整個(gè)設(shè)備的運(yùn)行
    的頭像 發(fā)表于 07-13 10:16 ?787次閱讀
    螺桿式冷水機(jī)蒸發(fā)器<b class='flag-5'>出現(xiàn)</b>故障<b class='flag-5'>會(huì)出現(xiàn)</b>什么問(wèn)題

    自動(dòng)無(wú)功補(bǔ)償裝置關(guān)閉會(huì)出現(xiàn)什么狀況?

    自動(dòng)無(wú)功補(bǔ)償裝置是現(xiàn)代電力系統(tǒng)中常用的設(shè)備之一,它能夠?qū)崿F(xiàn)電力系統(tǒng)功率因數(shù)的自動(dòng)補(bǔ)償,提高電力系統(tǒng)的穩(wěn)定性和能效。然而,當(dāng)自動(dòng)無(wú)功補(bǔ)償裝置關(guān)閉,會(huì)出現(xiàn)一些特定的狀況,是企業(yè)需要了解并
    的頭像 發(fā)表于 09-07 14:40 ?1445次閱讀

    請(qǐng)教關(guān)于LVDS阻抗匹配的問(wèn)題 LVDS輸出阻抗偏大會(huì)出現(xiàn)什么情況?

    請(qǐng)教關(guān)于LVDS阻抗匹配的問(wèn)題 LVDS輸出阻抗偏大會(huì)出現(xiàn)什么情況? LVDS(Low Voltage Differential Signaling)是差分信號(hào)傳輸技術(shù),能夠提供較高的數(shù)據(jù)傳輸速率
    的頭像 發(fā)表于 10-18 16:48 ?1786次閱讀

    當(dāng)信號(hào)源的幅度過(guò)大,在兩級(jí)放大器的輸出端分別會(huì)出現(xiàn)什么情況?

    當(dāng)信號(hào)源的幅度過(guò)大,在兩級(jí)放大器的輸出端分別會(huì)出現(xiàn)什么情況當(dāng)信號(hào)源的幅度過(guò)大時(shí),在兩級(jí)放大器的輸出端會(huì)出現(xiàn)一系列不良影響和問(wèn)題。這些問(wèn)題
    的頭像 發(fā)表于 02-03 17:42 ?1754次閱讀

    MCX射頻頭使用不當(dāng)會(huì)出現(xiàn)什么情況

     德索工程師說(shuō)道MCX射頻頭使用不當(dāng)可能會(huì)出現(xiàn)多種情況,這些問(wèn)題不僅影響設(shè)備的性能,還可能對(duì)系統(tǒng)整體造成損害。以下是對(duì)MCX射頻頭使用不當(dāng)可能出現(xiàn)情況的詳細(xì)分析:  連接不穩(wěn):如果M
    的頭像 發(fā)表于 09-27 09:05 ?288次閱讀
    MCX射頻頭使用不當(dāng)<b class='flag-5'>會(huì)出現(xiàn)</b>什么<b class='flag-5'>情況</b>