Improve Channel Direction example
This commit is contained in:
parent
448c597a58
commit
c67921cb0e
@ -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)
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
d1b1580f72c3c101ea46480e6c2361f4f96b049a
|
||||
mjNJDHwUH4R
|
||||
3c2151473e3a75fb2318566ad1d5528919cd47fa
|
||||
tyxhbRAiXMa
|
||||
|
@ -1,2 +1,4 @@
|
||||
$ go run channel-directions.go
|
||||
passed message
|
||||
send message: Hello, World!
|
||||
forwarding: Hello, World!
|
||||
reading messages: Hello, World!
|
||||
|
36
public/channel-directions
generated
36
public/channel-directions
generated
@ -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"><-</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"><-</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"><-</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">"send message:"</span><span class="p">,</span> <span class="nx">msg</span><span class="p">)</span>
|
||||
<span class="nx">sendCh</span> <span class="o"><-</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"><-</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"><-</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"><-</span><span class="nx">pings</span>
|
||||
<span class="nx">pongs</span> <span class="o"><-</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"><-</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"><-</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"><-</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">"forwarding:"</span><span class="p">,</span> <span class="nx">msg</span><span class="p">)</span>
|
||||
<span class="nx">forwardCh</span> <span class="o"><-</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">"passed message"</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"><-</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">"Hello, World!"</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">"reading messages: "</span><span class="p">,</span> <span class="o"><-</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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user