Fix up formatting and phrasing for closed chan read
This commit is contained in:
parent
991f8937dd
commit
461f6955d6
@ -48,11 +48,13 @@ func main() {
|
||||
// we saw earlier.
|
||||
<-done
|
||||
|
||||
// It is possible to read more from an empty closed channel.
|
||||
// However, instead of waiting for a message, we will always
|
||||
// immediately receive a zero value of the channel's type and
|
||||
// a false bool flag indicating that we should stop reading from it.
|
||||
j, isOpened := <-jobs
|
||||
fmt.Println("no jobs to receive", j)
|
||||
fmt.Println("awaiting more jobs:", isOpened)
|
||||
// Reading from a closed channel succeeds immediately,
|
||||
// returning the zero value of the underlying type.
|
||||
// The optional second return value is `true` if the
|
||||
// value received was delivered by a successful send
|
||||
// operation to the channel, or `false` if it was a
|
||||
// zero value generated because the channel is closed
|
||||
// and empty.
|
||||
_, ok := <-jobs
|
||||
fmt.Println("received more jobs:", ok)
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
3b474131d4d983ac5e53d8a6b94e069a8a4b775d
|
||||
yLh6yhTGZeF
|
||||
13f0ccf3674db8e9631a424c4070f9d423f7dc11
|
||||
yZijZHYe22y
|
||||
|
@ -7,8 +7,7 @@ sent job 3
|
||||
received job 3
|
||||
sent all jobs
|
||||
received all jobs
|
||||
no jobs to receive 0
|
||||
awaiting more jobs: false
|
||||
received more jobs: false
|
||||
|
||||
# The idea of closed channels leads naturally to our next
|
||||
# example: `range` over channels.
|
||||
|
23
public/closing-channels
generated
23
public/closing-channels
generated
@ -43,7 +43,7 @@ completion to the channel’s receivers.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="https://go.dev/play/p/yLh6yhTGZeF"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="https://go.dev/play/p/yZijZHYe22y"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><code><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span></span></span></code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
@ -134,17 +134,19 @@ we saw earlier.</p>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>It is possible to read more from an empty closed channel.
|
||||
However, instead of waiting for a message, we will always
|
||||
immediately receive a zero value of the channel’s type and
|
||||
a false bool flag indicating that we should stop reading from it.</p>
|
||||
<p>Reading from a closed channel succeeds immediately,
|
||||
returning the zero value of the underlying type.
|
||||
The optional second return value is <code>true</code> if the
|
||||
value received was delivered by a successful send
|
||||
operation to the channel, or <code>false</code> if it was a
|
||||
zero value generated because the channel is closed
|
||||
and empty.</p>
|
||||
|
||||
</td>
|
||||
<td class="code">
|
||||
|
||||
<pre class="chroma"><code><span class="line"><span class="cl"> <span class="nx">j</span><span class="p">,</span> <span class="nx">isOpened</span> <span class="o">:=</span> <span class="o"><-</span><span class="nx">jobs</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"no jobs to receive"</span><span class="p">,</span> <span class="nx">j</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"awaiting more jobs:"</span><span class="p">,</span> <span class="nx">isOpened</span><span class="p">)</span>
|
||||
<pre class="chroma"><code><span class="line"><span class="cl"> <span class="nx">_</span><span class="p">,</span> <span class="nx">ok</span> <span class="o">:=</span> <span class="o"><-</span><span class="nx">jobs</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"received more jobs:"</span><span class="p">,</span> <span class="nx">ok</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
@ -168,8 +170,7 @@ a false bool flag indicating that we should stop reading from it.</p>
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">received job 3
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">sent all jobs
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">received all jobs
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">no jobs to receive 0
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">awaiting more jobs: false</span></span></span></code></pre>
|
||||
</span></span></span><span class="line"><span class="cl"><span class="go">received more jobs: false</span></span></span></code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -200,7 +201,7 @@ example: <code>range</code> over channels.</p>
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func main() {\u000A jobs :\u003D make(chan int, 5)\u000A done :\u003D make(chan bool)\u000A');codeLines.push(' go func() {\u000A for {\u000A j, more :\u003D \u003C-jobs\u000A if more {\u000A fmt.Println(\"received job\", j)\u000A } else {\u000A fmt.Println(\"received all jobs\")\u000A done \u003C- true\u000A return\u000A }\u000A }\u000A }()\u000A');codeLines.push(' for j :\u003D 1; j \u003C\u003D 3; j++ {\u000A jobs \u003C- j\u000A fmt.Println(\"sent job\", j)\u000A }\u000A close(jobs)\u000A fmt.Println(\"sent all jobs\")\u000A');codeLines.push(' \u003C-done\u000A');codeLines.push(' j, isOpened :\u003D \u003C-jobs\u000A fmt.Println(\"no jobs to receive\", j)\u000A fmt.Println(\"awaiting more jobs:\", isOpened)\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func main() {\u000A jobs :\u003D make(chan int, 5)\u000A done :\u003D make(chan bool)\u000A');codeLines.push(' go func() {\u000A for {\u000A j, more :\u003D \u003C-jobs\u000A if more {\u000A fmt.Println(\"received job\", j)\u000A } else {\u000A fmt.Println(\"received all jobs\")\u000A done \u003C- true\u000A return\u000A }\u000A }\u000A }()\u000A');codeLines.push(' for j :\u003D 1; j \u003C\u003D 3; j++ {\u000A jobs \u003C- j\u000A fmt.Println(\"sent job\", j)\u000A }\u000A close(jobs)\u000A fmt.Println(\"sent all jobs\")\u000A');codeLines.push(' \u003C-done\u000A');codeLines.push(' _, ok :\u003D \u003C-jobs\u000A fmt.Println(\"received more jobs:\", ok)\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
Loading…
x
Reference in New Issue
Block a user