This commit is contained in:
chai2010
2015-12-24 14:47:06 +08:00
parent 7ec2f7cdc1
commit 745a165b6f
145 changed files with 3157 additions and 859 deletions

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="1.6" data-chapter-title="併發穫取多個URL" data-filepath="ch1/ch1-06.md" data-basepath=".." data-revision="Mon Dec 21 2015 12:51:02 GMT+0800 (中国标准时间)">
<div class="book" data-level="1.6" data-chapter-title="併發穫取多個URL" data-filepath="ch1/ch1-06.md" data-basepath=".." data-revision="Thu Dec 24 2015 14:42:02 GMT+0800 (中国标准时间)">
<div class="book-summary">
@@ -1975,16 +1975,16 @@
</li>
<li class="chapter " data-level="14" data-path="errata.html">
<li class="chapter " data-level="14" data-path="CONTRIBUTORS.html">
<a href="../errata.html">
<a href="../CONTRIBUTORS.html">
<i class="fa fa-check"></i>
<b>14.</b>
勘誤
附録
</a>
@@ -2023,8 +2023,8 @@
<section class="normal" id="section-">
<h2 id="16-&#x4F75;&#x767C;&#x7A6B;&#x53D6;&#x591A;&#x500B;url">1.6 &#x4F75;&#x767C;&#x7A6B;&#x53D6;&#x591A;&#x500B;URL</h2>
<p>Go&#x8A9E;&#x8A00;&#x6700;&#x6709;&#x610F;&#x601D;&#x4F75;&#x4E14;&#x6700;&#x65B0;&#x5947;&#x7684;&#x7279;&#x6027;&#x5C31;&#x662F;&#x5176;&#x5C0D;&#x4F75;&#x767C;&#x7DE8;&#x7A0B;&#x7684;&#x652F;&#x6301;&#x4E86;&#x3002;&#x4F75;&#x767C;&#x7DE8;&#x7A0B;&#x662F;&#x4E00;&#x500B;&#x5927;&#x8A71;&#x984C;&#xFF0C;&#x5728;&#x7B2C;&#x516B;&#x7AE0;&#x548C;&#x7B2C;&#x4E5D;&#x7AE0;&#x4E2D;&#x6703;&#x8B1B;&#x5230;&#x3002;&#x9019;&#x91CC;&#x6211;&#x5011;&#x96BB;&#x6DFA;&#x5690;&#x8F12;&#x6B62;&#x5730;&#x4F86;&#x9AD4;&#x9A57;&#x4E00;&#x4E0B;Go&#x8A9E;&#x8A00;&#x91CC;&#x7684;goroutine&#x548C;channel&#x3002;</p>
<h2 id="16-&#x4F75;&#x767C;&#x7A6B;&#x53D6;&#x591A;&#x500B;url">1.6. &#x4F75;&#x767C;&#x7A6B;&#x53D6;&#x591A;&#x500B;URL</h2>
<p>Go&#x8A9E;&#x8A00;&#x6700;&#x6709;&#x610F;&#x601D;&#x4F75;&#x4E14;&#x6700;&#x65B0;&#x5947;&#x7684;&#x7279;&#x6027;&#x5C31;&#x662F;&#x5176;&#x5C0D;&#x4F75;&#x767C;&#x7DE8;&#x7A0B;&#x7684;&#x652F;&#x6301;&#x4E86;&#x3002;&#x4F75;&#x767C;&#x7DE8;&#x7A0B;&#x662F;&#x4E00;&#x500B;&#x5927;&#x8A71;&#x984C;&#xFF0C;&#x5728;&#x7B2C;&#x516B;&#x7AE0;&#x548C;&#x7B2C;&#x4E5D;&#x7AE0;&#x4E2D;&#x6703;&#x5C08;&#x9580;&#x8B1B;&#x5230;&#x3002;&#x9019;&#x91CC;&#x6211;&#x5011;&#x96BB;&#x6DFA;&#x5690;&#x8F12;&#x6B62;&#x5730;&#x4F86;&#x9AD4;&#x9A57;&#x4E00;&#x4E0B;Go&#x8A9E;&#x8A00;&#x91CC;&#x7684;goroutine&#x548C;channel&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x7684;&#x4F8B;&#x5B50;fetchall&#xFF0C;&#x548C;&#x4E0A;&#x9762;&#x7684;fetch&#x7A0B;&#x5E8F;&#x6240;&#x8981;&#x505A;&#x7684;&#x5DE5;&#x4F5C;&#x662F;&#x4E00;&#x81F4;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x9019;&#x500B;fetchall&#x7684;&#x7279;&#x522B;&#x4E4B;&#x8655;&#x5728;&#x65BC;&#x5B83;&#x6703;&#x540C;&#x6642;&#x53BB;&#x7A6B;&#x53D6;&#x6240;&#x6709;&#x7684;URL&#xFF0C;&#x6240;&#x4EE5;&#x9019;&#x500B;&#x7A0B;&#x5E8F;&#x7684;&#x7A6B;&#x53D6;&#x6642;&#x9593;&#x4E0D;&#x6703;&#x8D85;&#x904E;&#x57F7;&#x884C;&#x6642;&#x9593;&#x6700;&#x9577;&#x7684;&#x90A3;&#x4E00;&#x500B;&#x4EFB;&#x52D9;&#xFF0C;&#x800C;&#x4E0D;&#x6703;&#x50CF;&#x524D;&#x9762;&#x7684;fetch&#x7A0B;&#x5E8F;&#x4E00;&#x6A23;&#xFF0C;&#x57F7;&#x884C;&#x6642;&#x9593;&#x662F;&#x6240;&#x6709;&#x4EFB;&#x52D9;&#x57F7;&#x884C;&#x6642;&#x9593;&#x4E4B;&#x548C;&#x3002;&#x9019;&#x6B21;&#x7684;fetchall&#x7A0B;&#x5E8F;&#x96BB;&#x6703;&#x6253;&#x5370;&#x7A6B;&#x53D6;&#x7684;&#x5167;&#x5BB9;&#x5927;&#x5C0F;&#x548C;&#x7D93;&#x904E;&#x7684;&#x6642;&#x9593;&#xFF0C;&#x4E0D;&#x6703;&#x50CF;&#x4E0A;&#x9762;&#x90A3;&#x6A23;&#x6253;&#x5370;&#x9F63;&#x7A6B;&#x53D6;&#x7684;&#x5167;&#x5BB9;&#x3002;</p>
<pre><code class="lang-go">gopl.io/ch1/fetchall
<span class="hljs-comment">// Fetchall fetches URLs in parallel and reports their times and sizes.</span>
@@ -2069,17 +2069,16 @@
}
</code></pre>
<p>&#x4E0B;&#x9762;&#x662F;&#x4E00;&#x500B;&#x4F7F;&#x7528;&#x7684;&#x4F8B;&#x5B50;</p>
<pre><code class="lang-bash">$ go build gopl.io/ch1/fetchall
<pre><code>$ go build gopl.io/ch1/fetchall
$ ./fetchall https://golang.org http://gopl.io https://godoc.org
<span class="hljs-number">0.14</span>s <span class="hljs-number">6852</span> https://godoc.org
<span class="hljs-number">0.16</span>s <span class="hljs-number">7261</span> https://golang.org
<span class="hljs-number">0.48</span>s <span class="hljs-number">2475</span> http://gopl.io
<span class="hljs-number">0.48</span>s elapsed
</code></pre>
<p>goroutine&#x662F;&#x4E00;&#x7A2E;&#x51FD;&#x6578;&#x7684;&#x4F75;&#x884C;&#x57F7;&#x884C;&#x65B9;&#x5F0F;&#xFF0C;&#x800C;channel&#x662F;&#x7528;&#x4F86;&#x5728;goroutine&#x4E4B;&#x9593;&#x9032;&#x884C;&#x53C3;&#x6578;&#x50B3;&#x905E;&#x3002;main&#x51FD;&#x6578;&#x537D;&#x904B;&#x884C;&#x5728;&#x4E00;&#x500B;goroutine&#x4E2D;&#xFF0C;&#x800C;go function&#x5247;&#x8868;&#x793A;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x65B0;&#x7684;goroutine&#xFF0C;&#x4F75;&#x8B93;&#x9019;&#x500B;&#x51FD;&#x6578;&#x53BB;&#x9019;&#x500B;&#x65B0;&#x7684;goroutine&#x91CC;&#x57F7;&#x884C;&#x3002;</p>
<p>main&#x51FD;&#x6578;&#x4E2D;&#x7528;make&#x51FD;&#x6578;&#x5275;&#x5EFA;&#x4E86;&#x4E00;&#x500B;&#x50B3;&#x905E;string&#x985E;&#x578B;&#x53C3;&#x6578;&#x7684;channel&#xFF0C;&#x5C0D;&#x6BCF;&#x4E00;&#x500B;&#x547D;&#x4EE4;&#x884C;&#x53C3;&#x6578;&#xFF0C;&#x6211;&#x5011;&#x90FD;&#x7528;go&#x9019;&#x500B;&#x95DC;&#x9375;&#x5B57;&#x4F86;&#x5275;&#x5EFA;&#x4E00;&#x500B;goroutine&#xFF0C;&#x4F75;&#x4E14;&#x8B93;&#x51FD;&#x6578;&#x5728;&#x9019;&#x500B;goroutine&#x7570;&#x6B65;&#x57F7;&#x884C;http.Get&#x65B9;&#x6CD5;&#x3002;&#x9019;&#x500B;&#x7A0B;&#x5E8F;&#x91CC;&#x7684;io.Copy&#x6703;&#x628A;&#x97FF;&#x61C9;&#x7684;Body&#x5167;&#x5BB9;&#x62F7;&#x8C9D;&#x5230;ioutil.Discard&#x8F38;&#x9F63;&#x6D41;&#x4E2D;&#xFF0C;&#x56E0;&#x7232;&#x6211;&#x5011;&#x9700;&#x8981;&#x9019;&#x500B;&#x65B9;&#x6CD5;&#x8FD4;&#x8FF4;&#x7684;&#x5B57;&#x7BC0;&#x6578;&#xFF0C;&#x4F46;&#x662F;&#x53C8;&#x4E0D;&#x60F3;&#x8981;&#x5176;&#x5167;&#x5BB9;&#x3002;&#x6BCF;&#x7576;&#x8ACB;&#x6C42;&#x8FD4;&#x8FF4;&#x5167;&#x5BB9;&#x6642;&#xFF0C;fetch&#x51FD;&#x6578;&#x90FD;&#x6703;&#x5F80;ch&#x9019;&#x500B;channel&#x91CC;&#x5BEB;&#x5165;&#x4E00;&#x500B;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x7531;main&#x51FD;&#x6578;&#x91CC;&#x7684;&#x7B2C;&#x4E8C;&#x500B;for&#x5FAA;&#x74B0;&#x4F86;&#x8655;&#x7406;&#x4F75;&#x6253;&#x5370;channel&#x91CC;&#x7684;&#x9019;&#x500B;&#x5B57;&#x7B26;&#x4E32;&#x3002;</p>
0.14s 6852 https://godoc.org
0.16s 7261 https://golang.org
0.48s 2475 http://gopl.io
0.48s elapsed
</code></pre><p>goroutine&#x662F;&#x4E00;&#x7A2E;&#x51FD;&#x6578;&#x7684;&#x4F75;&#x767C;&#x57F7;&#x884C;&#x65B9;&#x5F0F;&#xFF0C;&#x800C;channel&#x662F;&#x7528;&#x4F86;&#x5728;goroutine&#x4E4B;&#x9593;&#x9032;&#x884C;&#x53C3;&#x6578;&#x50B3;&#x905E;&#x3002;main&#x51FD;&#x6578;&#x4E5F;&#x662F;&#x904B;&#x884C;&#x5728;&#x4E00;&#x500B;goroutine&#x4E2D;&#xFF0C;&#x800C;go function&#x5247;&#x8868;&#x793A;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x65B0;&#x7684;goroutine&#xFF0C;&#x4F75;&#x5728;&#x9019;&#x500B;&#x9019;&#x500B;&#x65B0;&#x7684;goroutine&#x91CC;&#x57F7;&#x884C;&#x9019;&#x500B;&#x51FD;&#x6578;&#x3002;</p>
<p>main&#x51FD;&#x6578;&#x4E2D;&#x7528;make&#x51FD;&#x6578;&#x5275;&#x5EFA;&#x4E86;&#x4E00;&#x500B;&#x50B3;&#x905E;string&#x985E;&#x578B;&#x53C3;&#x6578;&#x7684;channel&#xFF0C;&#x5C0D;&#x6BCF;&#x4E00;&#x500B;&#x547D;&#x4EE4;&#x884C;&#x53C3;&#x6578;&#xFF0C;&#x6211;&#x5011;&#x90FD;&#x7528;go&#x9019;&#x500B;&#x95DC;&#x9375;&#x5B57;&#x4F86;&#x5275;&#x5EFA;&#x4E00;&#x500B;goroutine&#xFF0C;&#x4F75;&#x4E14;&#x8B93;&#x51FD;&#x6578;&#x5728;&#x9019;&#x500B;goroutine&#x7570;&#x6B65;&#x57F7;&#x884C;http.Get&#x65B9;&#x6CD5;&#x3002;&#x9019;&#x500B;&#x7A0B;&#x5E8F;&#x91CC;&#x7684;io.Copy&#x6703;&#x628A;&#x97FF;&#x61C9;&#x7684;Body&#x5167;&#x5BB9;&#x62F7;&#x8C9D;&#x5230;ioutil.Discard&#x8F38;&#x9F63;&#x6D41;&#x4E2D;&#xFF08;&#x8B6F;&#x8A3B;&#xFF1A;&#x9019;&#x662F;&#x4E00;&#x500B;&#x5783;&#x573E;&#x6876;&#xFF0C;&#x53EF;&#x4EE5;&#x5411;&#x91CC;&#x9762;&#x5BEB;&#x4E00;&#x4E9B;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x6578;&#x64DA;&#xFF09;&#xFF0C;&#x56E0;&#x7232;&#x6211;&#x5011;&#x9700;&#x8981;&#x9019;&#x500B;&#x65B9;&#x6CD5;&#x8FD4;&#x8FF4;&#x7684;&#x5B57;&#x7BC0;&#x6578;&#xFF0C;&#x4F46;&#x662F;&#x53C8;&#x4E0D;&#x60F3;&#x8981;&#x5176;&#x5167;&#x5BB9;&#x3002;&#x6BCF;&#x7576;&#x8ACB;&#x6C42;&#x8FD4;&#x8FF4;&#x5167;&#x5BB9;&#x6642;&#xFF0C;fetch&#x51FD;&#x6578;&#x90FD;&#x6703;&#x5F80;ch&#x9019;&#x500B;channel&#x91CC;&#x5BEB;&#x5165;&#x4E00;&#x500B;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x7531;main&#x51FD;&#x6578;&#x91CC;&#x7684;&#x7B2C;&#x4E8C;&#x500B;for&#x5FAA;&#x74B0;&#x4F86;&#x8655;&#x7406;&#x4F75;&#x6253;&#x5370;channel&#x91CC;&#x7684;&#x9019;&#x500B;&#x5B57;&#x7B26;&#x4E32;&#x3002;</p>
<p>&#x7576;&#x4E00;&#x500B;goroutine&#x5690;&#x8A66;&#x5728;&#x4E00;&#x500B;channel&#x4E0A;&#x505A;send&#x6216;&#x8005;receive&#x64CD;&#x4F5C;&#x6642;&#xFF0C;&#x9019;&#x500B;goroutine&#x6703;&#x963B;&#x585E;&#x5728;&#x8ABF;&#x7528;&#x8655;&#xFF0C;&#x76F4;&#x5230;&#x53E6;&#x4E00;&#x500B;goroutine&#x5F80;&#x9019;&#x500B;channel&#x91CC;&#x5BEB;&#x5165;&#x3001;&#x6216;&#x8005;&#x63A5;&#x6536;&#x4E86;&#x503C;&#xFF0C;&#x9019;&#x6A23;&#x5169;&#x500B;goroutine&#x7E94;&#x6703;&#x7E7C;&#x7E8C;&#x57F7;&#x884C;&#x64CD;&#x4F5C;channel&#x5B8C;&#x6210;&#x4E4B;&#x5F8C;&#x7684;&#x908F;&#x8F2F;&#x3002;&#x5728;&#x9019;&#x500B;&#x4F8B;&#x5B50;&#x4E2D;&#xFF0C;&#x6BCF;&#x4E00;&#x500B;fetch&#x51FD;&#x6578;&#x5728;&#x57F7;&#x884C;&#x6642;&#x90FD;&#x6703;&#x5F80;channel&#x91CC;&#x767C;&#x9001;&#x4E00;&#x500B;&#x503C;(ch &lt;- expression)&#xFF0C;&#x4E3B;&#x51FD;&#x6578;&#x63A5;&#x6536;&#x9019;&#x4E9B;&#x503C;(&lt;-ch)&#x3002;&#x9019;&#x500B;&#x7A0B;&#x5E8F;&#x4E2D;&#x6211;&#x5011;&#x7528;main&#x51FD;&#x6578;&#x4F86;&#x6240;&#x6709;fetch&#x51FD;&#x6578;&#x50B3;&#x8FF4;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x5728;goroutine&#x7570;&#x6B65;&#x57F7;&#x884C;&#x6642;&#x540C;&#x6642;&#x7D50;&#x675F;&#x3002;</p>
<p>Exercise 1.10: &#x627E;&#x4E00;&#x500B;&#x6578;&#x64DA;&#x91CF;&#x6BD4;&#x8F03;&#x5927;&#x7684;&#x7DB2;&#x7AD9;&#xFF0C;&#x7528;&#x672C;&#x5C0F;&#x7BC0;&#x4E2D;&#x7684;&#x7A0B;&#x5E8F;&#x8ABF;&#x7814;&#x7DB2;&#x7AD9;&#x7684;&#x7DE9;&#x5B58;&#x7B56;&#x7565;&#xFF0C;&#x5C0D;&#x6BCF;&#x500B;URL&#x57F7;&#x884C;&#x5169;&#x904D;&#x8ACB;&#x6C42;&#xFF0C;&#x67FB;&#x770B;&#x5169;&#x6B21;&#x6642;&#x9593;&#x662F;&#x5426;&#x6709;&#x8F03;&#x5927;&#x7684;&#x5DEE;&#x522B;&#xFF0C;&#x4F75;&#x4E14;&#x6BCF;&#x6B21;&#x7A6B;&#x53D6;&#x5230;&#x7684;&#x97FF;&#x61C9;&#x5167;&#x5BB9;&#x662F;&#x5426;&#x4E00;&#x81F4;&#xFF0C;&#x8129;&#x6539;&#x672C;&#x7BC0;&#x4E2D;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x5C07;&#x97FF;&#x61C9;&#x7D50;&#x679C;&#x8F38;&#x9F63;&#xFF0C;&#x4EE5;&#x4FBF;&#x65BC;&#x9032;&#x884C;&#x5C0D;&#x6BD4;&#x3002;</p>
<p><strong>&#x7DF4;&#x7FD2; 1.10&#xFF1A;</strong> &#x627E;&#x4E00;&#x500B;&#x6578;&#x64DA;&#x91CF;&#x6BD4;&#x8F03;&#x5927;&#x7684;&#x7DB2;&#x7AD9;&#xFF0C;&#x7528;&#x672C;&#x5C0F;&#x7BC0;&#x4E2D;&#x7684;&#x7A0B;&#x5E8F;&#x8ABF;&#x7814;&#x7DB2;&#x7AD9;&#x7684;&#x7DE9;&#x5B58;&#x7B56;&#x7565;&#xFF0C;&#x5C0D;&#x6BCF;&#x500B;URL&#x57F7;&#x884C;&#x5169;&#x904D;&#x8ACB;&#x6C42;&#xFF0C;&#x67FB;&#x770B;&#x5169;&#x6B21;&#x6642;&#x9593;&#x662F;&#x5426;&#x6709;&#x8F03;&#x5927;&#x7684;&#x5DEE;&#x522B;&#xFF0C;&#x4F75;&#x4E14;&#x6BCF;&#x6B21;&#x7A6B;&#x53D6;&#x5230;&#x7684;&#x97FF;&#x61C9;&#x5167;&#x5BB9;&#x662F;&#x5426;&#x4E00;&#x81F4;&#xFF0C;&#x8129;&#x6539;&#x672C;&#x7BC0;&#x4E2D;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x5C07;&#x97FF;&#x61C9;&#x7D50;&#x679C;&#x8F38;&#x9F63;&#xFF0C;&#x4EE5;&#x4FBF;&#x65BC;&#x9032;&#x884C;&#x5C0D;&#x6BD4;&#x3002;</p>
</section>