教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang无缓冲通道

golang无缓冲通道

发布时间:2021-12-04   编辑:jiaochengji.com
教程集为您提供golang无缓冲通道等资源,欢迎您收藏本站,我们将为您提供最新的golang无缓冲通道资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

<h3>无缓冲通道</h3>

通道是goroutine之间的安全通讯机制。是阻塞/同步机制

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"fmt"</span> <span class="token string">"math/rand"</span> <span class="token string">"sync"</span> <span class="token string">"time"</span> <span class="token punctuation">)</span> <span class="token keyword">var</span> wg sync<span class="token punctuation">.</span>WaitGroup <span class="token keyword">func</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> rand<span class="token punctuation">.</span><span class="token function">Seed</span><span class="token punctuation">(</span>time<span class="token punctuation">.</span><span class="token function">Now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">UnixNano</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cc <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">chan</span> <span class="token builtin">byte</span><span class="token punctuation">)</span> wg<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment">// 运动员就绪</span> <span class="token keyword">go</span> <span class="token function">playball</span><span class="token punctuation">(</span><span class="token string">"ping jie"</span><span class="token punctuation">,</span> cc<span class="token punctuation">)</span> <span class="token keyword">go</span> <span class="token function">playball</span><span class="token punctuation">(</span><span class="token string">"luo ge"</span><span class="token punctuation">,</span> cc<span class="token punctuation">)</span> cc <span class="token operator"><-</span> <span class="token number">1</span> wg<span class="token punctuation">.</span><span class="token function">Wait</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// 运动员</span> <span class="token keyword">func</span> <span class="token function">playball</span><span class="token punctuation">(</span>name <span class="token builtin">string</span><span class="token punctuation">,</span> cc <span class="token keyword">chan</span> <span class="token builtin">byte</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">defer</span> wg<span class="token punctuation">.</span><span class="token function">Done</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">{</span> <span class="token comment">// 接球</span> ball<span class="token punctuation">,</span> ok <span class="token operator">:=</span> <span class="token operator"><-</span>cc <span class="token keyword">if</span> <span class="token operator">!</span>ok <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"Player %s Won\n"</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token comment">// 结束条件判断</span> n <span class="token operator">:=</span> rand<span class="token punctuation">.</span><span class="token function">Intn</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span> <span class="token keyword">if</span> n<span class="token operator">%</span><span class="token number">9</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"Player %s Missed\n"</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span> <span class="token function">close</span><span class="token punctuation">(</span>cc<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token comment">// 发球</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"Player %s Hit %d\n"</span><span class="token punctuation">,</span> name<span class="token punctuation">,</span> ball<span class="token punctuation">)</span> cc <span class="token operator"><-</span> ball <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“golang无缓冲通道”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go语言通道插入0_Go语言入门必知教程-通道
golang同步机制之通道
go channel 缓冲区最大限制_Golang 入门 : channel(通道)
Go语言并发
从Deadlock报错理解Go channel机制(一)
golang的channel机制
如何在golang中关闭bufio.reader_golang 并发编程
Go语言中通道(channel)用于goroutine通信
golang channel的使用以及调度原理
mysql中的query_cache_limit进行数据库优化

[关闭]
~ ~