<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>channel on 华说记录我的生活</title>
    <link>http://www.huasay.com/tags/channel/</link>
    <description>Recent content in channel on 华说记录我的生活</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 04 Nov 2022 23:32:25 +0800</lastBuildDate>
    <atom:link href="http://www.huasay.com/tags/channel/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>golang面试 - channel全解析</title>
      <link>http://www.huasay.com/2022/11/04/interview-channel/</link>
      <pubDate>Fri, 04 Nov 2022 23:32:25 +0800</pubDate>
      <guid>http://www.huasay.com/2022/11/04/interview-channel/</guid>
      <description>channel 什么情况下会出现panic 1 2 3 1. 试图往已close的channel继续发送 2. 试图关闭已关闭的channel 3. 试图关闭一个nil的channel 向为nil的channel发送数据会怎样 1 2 3 给定一个 nil channel c: &amp;lt;-c 从 c 接收将永远阻塞 c &amp;lt;- v 发送值到 c 会永远阻塞 channel close后读的问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 关闭后继续读数据，已在缓冲区内的可以读取到数据，而后得到的是零值(对于int，就是0)。 z 我们可以通过for循环遍历channel，来获取到已经写入的值 for _, v := range channel{ } 对于可能获取到零值，我们可以使用断言判断，ok为false代表channel已关闭后读取的 value, ok := &amp;lt;- channel 也可以在close channel之后有意将channel 置为 nil， 如此再使用，并不会读取到零值 对于不带缓冲的ch，和带缓冲的一样，channel close掉之后并不影响读，只影响写入 channel的底层结构 底层结构体 1 2 3 4 5 6 7 8 9 10 11 12 13 14 type hchan struct { qcount uint // total data in the queue 代表 chan 中已经接收但还没被取走的元素的个数。内建函数 len 可以返回这个字段的值。 dataqsiz uint // size of the circular queue 循环队列的大小 buf unsafe.</description>
    </item>
    <item>
      <title>golang channel</title>
      <link>http://www.huasay.com/2020/07/25/golang-channel/</link>
      <pubDate>Sat, 25 Jul 2020 11:10:05 +0800</pubDate>
      <guid>http://www.huasay.com/2020/07/25/golang-channel/</guid>
      <description>channel是golang中重要的组成部分。也是协程通信间通信的方式
channel常见理论面试题 channel 什么情况下会出现panic 试图往已close的channel继续发送 试图关闭已关闭的channel 试图关闭一个nil的channel 向为nil的channel发送数据会怎样 给定一个 nil channel c:
&amp;lt;-c 从 c 接收将永远阻塞
c &amp;lt;- v 发送值到 c 会永远阻塞
channel close后读的问题 关闭后继续读数据，已在缓冲区内的可以读取到数据，而后得到的是零值(对于int，就是0)。
我们可以通过for循环遍历channel，来获取到已经写入的值
1 2 3 for _, v := range channel{ } 对于可能获取到零值，我们可以使用断言判断，ok为false代表channel已关闭后读取的
1 value, ok := &amp;lt;- channel 也可以在close channel之后有意将channel 置为 nil， 如此再使用，并不会读取到零值
对于不带缓冲的ch，和带缓冲的一样，channel close掉之后并不影响读，只影响写入
channel底层源码剖析 go的运行时源码在runtime/chan.go文件下，可以在该文件下查看具体的数据结构，send(channel &amp;lt;-),receive(-&amp;gt; channel)，close channel等操作
数据结构 1 2 3 4 5 6 7 8 9 10 11 12 type hchan struct { qcount uint // total data in the queue 代表 chan 中已经接收但还没被取走的元素的个数。内建函数 len 可以返回这个字段的值。 dataqsiz uint // size of the circular queue 循环队列的大小 buf unsafe.</description>
    </item>
  </channel>
</rss>
