Improve Channel Direction example

This commit is contained in:
Niall Grant 2020-05-05 17:09:39 +01:00
parent 448c597a58
commit c67921cb0e
No known key found for this signature in database
GPG Key ID: FDB037405D8C82D0
4 changed files with 40 additions and 32 deletions

View File

@ -7,24 +7,26 @@ package main
import "fmt"
// This `ping` function only accepts a channel for sending
// This `send` function only accepts a channel for sending
// values. It would be a compile-time error to try to
// receive on this channel.
func ping(pings chan<- string, msg string) {
pings <- msg
func send(sendCh chan<- string, msg string) {
fmt.Println("send message:", msg)
sendCh <- msg
}
// The `pong` function accepts one channel for receives
// (`pings`) and a second for sends (`pongs`).
func pong(pings <-chan string, pongs chan<- string) {
msg := <-pings
pongs <- msg
// The `fwd` function accepts one channel for receives
// (`sendCh`) and a second for sends (`forwardCh`).
func fwd(sendCh <-chan string, forwardCh chan<- string) {
msg := <-sendCh
fmt.Println("forwarding:", msg)
forwardCh <- msg
}
func main() {
pings := make(chan string, 1)
pongs := make(chan string, 1)
ping(pings, "passed message")
pong(pings, pongs)
fmt.Println(<-pongs)
sendCh := make(chan string, 1)
forwardCh := make(chan string, 1)
send(sendCh, "Hello, World!")
fwd(sendCh, forwardCh)
fmt.Println("reading messages: ", <-forwardCh)
}

View File

@ -1,2 +1,2 @@
d1b1580f72c3c101ea46480e6c2361f4f96b049a
mjNJDHwUH4R
3c2151473e3a75fb2318566ad1d5528919cd47fa
tyxhbRAiXMa

View File

@ -1,2 +1,4 @@
$ go run channel-directions.go
passed message
send message: Hello, World!
forwarding: Hello, World!
reading messages: Hello, World!

View File

@ -44,7 +44,7 @@ the program.</p>
</td>
<td class="code leading">
<a href="http://play.golang.org/p/mjNJDHwUH4R"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
<a href="http://play.golang.org/p/tyxhbRAiXMa"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
<div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
</pre></div>
@ -65,15 +65,16 @@ the program.</p>
<tr>
<td class="docs">
<p>This <code>ping</code> function only accepts a channel for sending
<p>This <code>send</code> function only accepts a channel for sending
values. It would be a compile-time error to try to
receive on this channel.</p>
</td>
<td class="code leading">
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">ping</span><span class="p">(</span><span class="nx">pings</span> <span class="kd">chan</span><span class="o">&lt;-</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">msg</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">pings</span> <span class="o">&lt;-</span> <span class="nx">msg</span>
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">send</span><span class="p">(</span><span class="nx">sendCh</span> <span class="kd">chan</span><span class="o">&lt;-</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">msg</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="s">&quot;send message:&quot;</span><span class="p">,</span> <span class="nx">msg</span><span class="p">)</span>
<span class="nx">sendCh</span> <span class="o">&lt;-</span> <span class="nx">msg</span>
<span class="p">}</span>
</pre></div>
@ -82,15 +83,16 @@ receive on this channel.</p>
<tr>
<td class="docs">
<p>The <code>pong</code> function accepts one channel for receives
(<code>pings</code>) and a second for sends (<code>pongs</code>).</p>
<p>The <code>fwd</code> function accepts one channel for receives
(<code>sendCh</code>) and a second for sends (<code>forwardCh</code>).</p>
</td>
<td class="code leading">
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">pong</span><span class="p">(</span><span class="nx">pings</span> <span class="o">&lt;-</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">pongs</span> <span class="kd">chan</span><span class="o">&lt;-</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">msg</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="nx">pings</span>
<span class="nx">pongs</span> <span class="o">&lt;-</span> <span class="nx">msg</span>
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">fwd</span><span class="p">(</span><span class="nx">sendCh</span> <span class="o">&lt;-</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">forwardCh</span> <span class="kd">chan</span><span class="o">&lt;-</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">msg</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="nx">sendCh</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="s">&quot;forwarding:&quot;</span><span class="p">,</span> <span class="nx">msg</span><span class="p">)</span>
<span class="nx">forwardCh</span> <span class="o">&lt;-</span> <span class="nx">msg</span>
<span class="p">}</span>
</pre></div>
@ -104,11 +106,11 @@ receive on this channel.</p>
<td class="code">
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">main</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">pings</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nx">pongs</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nx">ping</span><span class="p">(</span><span class="nx">pings</span><span class="p">,</span> <span class="s">&quot;passed message&quot;</span><span class="p">)</span>
<span class="nx">pong</span><span class="p">(</span><span class="nx">pings</span><span class="p">,</span> <span class="nx">pongs</span><span class="p">)</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="o">&lt;-</span><span class="nx">pongs</span><span class="p">)</span>
<span class="nx">sendCh</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nx">forwardCh</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="kt">string</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nx">send</span><span class="p">(</span><span class="nx">sendCh</span><span class="p">,</span> <span class="s">&quot;Hello, World!&quot;</span><span class="p">)</span>
<span class="nx">fwd</span><span class="p">(</span><span class="nx">sendCh</span><span class="p">,</span> <span class="nx">forwardCh</span><span class="p">)</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="s">&quot;reading messages: &quot;</span><span class="p">,</span> <span class="o">&lt;-</span><span class="nx">forwardCh</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
@ -126,7 +128,9 @@ receive on this channel.</p>
<td class="code">
<div class="highlight"><pre><span class="gp">$</span> go run channel-directions.go
<span class="go">passed message</span>
<span class="go">send message: Hello, World!</span>
<span class="go">forwarding: Hello, World!</span>
<span class="go">reading messages: Hello, World!</span>
</pre></div>
</td>
@ -145,7 +149,7 @@ receive on this channel.</p>
</div>
<script>
var codeLines = [];
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func ping(pings chan\x3C- string, msg string) {\u000A pings \x3C- msg\u000A}\u000A');codeLines.push('func pong(pings \x3C-chan string, pongs chan\x3C- string) {\u000A msg :\x3D \x3C-pings\u000A pongs \x3C- msg\u000A}\u000A');codeLines.push('func main() {\u000A pings :\x3D make(chan string, 1)\u000A pongs :\x3D make(chan string, 1)\u000A ping(pings, \"passed message\")\u000A pong(pings, pongs)\u000A fmt.Println(\x3C-pongs)\u000A}\u000A');codeLines.push('');
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func send(sendCh chan\x3C- string, msg string) {\u000A fmt.Println(\"send message:\", msg)\u000A sendCh \x3C- msg\u000A}\u000A');codeLines.push('func fwd(sendCh \x3C-chan string, forwardCh chan\x3C- string) {\u000A msg :\x3D \x3C-sendCh\u000A fmt.Println(\"forwarding:\", msg)\u000A forwardCh \x3C- msg\u000A}\u000A');codeLines.push('func main() {\u000A sendCh :\x3D make(chan string, 1)\u000A forwardCh :\x3D make(chan string, 1)\u000A send(sendCh, \"Hello, World!\")\u000A fwd(sendCh, forwardCh)\u000A fmt.Println(\"reading messages: \", \x3C-forwardCh)\u000A}\u000A');codeLines.push('');
</script>
<script src="site.js" async></script>
</body>