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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

一、正常的 channel

首先我們先來一段正常操作的代碼:

poYBAGL8W_2AcShBAAAtCLEMIdc627.png

這段代碼應該非常熟悉,這樣寫是否有問題呢?

執(zhí)行后的結果:

poYBAGL8XA-ALuPyAAAfzJjckaI325.png

如果一個 channel 不在某個協(xié)程里面關閉的話,我們的 for range 就會報死鎖的錯誤。

二、關閉后再讀取

1、使用 for range 讀取關閉后的 channel

現(xiàn)在我們在 for range 之前關閉下這個 channel,看會出現(xiàn)啥情況:

pYYBAGL8XCGAa_6gAABCUPjPvWw471.png

這樣寫代碼會出現(xiàn)啥問題呢?

poYBAGL8XDWAC2AOAAATcC2lvLk581.png

啥錯也沒有,正常的讀取。

2、直接獨立取值

下面我們換直接獨立取值的方式:

poYBAGL8XEiAFnr1AAAzJ2ZPpFc917.png

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

pYYBAGL8XFiAfedsAAANM8qHq90050.png

如果我們反復讀取呢?

pYYBAGL8XGmAKOJoAABOiTHv13M638.png

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

pYYBAGL8XICAPSEgAAAO5wQ1CgQ342.png

所以結論是:如果 channel 有元素還未讀,會正確讀出來,哪怕他已經(jīng)關閉了。

三、往里面寫值呢?

最后一起來看下,當 channel 關閉后,往里面寫值會怎樣?

pYYBAGL8XJiAIHCgAAAgpEO8GC8725.png

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

pYYBAGL8XKqAZzgXAAAXHxdNrwY953.png

會報 panic,具體原因我們可以看 go 的源碼,路徑為:src/runtime/chan.go

poYBAGL8XMSAP3QKAACmUgJdS7I575.png

你學廢了么?



審核編輯:劉清

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

    關注

    0

    文章

    31

    瀏覽量

    11751
  • go語言
    +關注

    關注

    1

    文章

    158

    瀏覽量

    9016
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

    STM32L4 FreeRTOS+DMA2 Channel 4無法將任何數(shù)據(jù)寫入SD卡怎么處理?

    使用時遇到了問題。為 SDMMC1_TX 選擇它時,我可以毫無問題地安裝 SD 卡和讀取數(shù)據(jù)。雖然我無法將任何數(shù)據(jù)寫入 SD 卡。我打電話:fresult = f_open(&
    發(fā)表于 01-06 08:02

    變頻器將進線缺相保護關閉,出現(xiàn)缺相運行會出現(xiàn)什么情況?

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

    為什么筆記本會出現(xiàn)暗屏

    為什么筆記本會出現(xiàn)暗屏   您好,為什么筆記本會出現(xiàn)暗屏呢? 屏暗是怎樣產(chǎn)生呢?普遍有以下4種情況:第一種是燈管出
    發(fā)表于 01-21 11:27 ?815次閱讀

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

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

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

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

    兩個IGBT為什么會出現(xiàn)同時導通的情況呢?

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

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

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

    自動無功補償裝置關閉會出現(xiàn)什么狀況?

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

    請教關于LVDS阻抗匹配的問題 LVDS輸出阻抗偏大會出現(xiàn)什么情況?

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

    信號源的幅度過大,在兩級放大器的輸出端分別會出現(xiàn)什么情況?

    信號源的幅度過大,在兩級放大器的輸出端分別會出現(xiàn)什么情況? 信號源的幅度過大時,在兩級放大器的輸出端會出現(xiàn)一系列不良影響和問題。這些問題
    的頭像 發(fā)表于 02-03 17:42 ?1390次閱讀

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

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