This commit is contained in:
chai2010
2015-12-21 12:55:18 +08:00
parent 1d7534e3c3
commit 7ec2f7cdc1
152 changed files with 54426 additions and 8958 deletions

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="7.2" data-chapter-title="接口類型" data-filepath="ch7/ch7-02.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="7.2" data-chapter-title="接口類型" data-filepath="ch7/ch7-02.md" data-basepath=".." data-revision="Mon Dec 21 2015 12:51:02 GMT+0800 (中国标准时间)">
<div class="book-summary">
@@ -146,7 +146,7 @@
<b>0.5.</b>
</a>
@@ -212,7 +212,7 @@
<b>1.3.</b>
査找重的行
査找重的行
</a>
@@ -227,7 +227,7 @@
<b>1.4.</b>
GIF動
GIF動
</a>
@@ -257,7 +257,7 @@
<b>1.6.</b>
穫取多個URL
穫取多個URL
</a>
@@ -479,7 +479,7 @@
<b>3.3.</b>
</a>
@@ -494,7 +494,7 @@
<b>3.4.</b>
爾型
爾型
</a>
@@ -544,7 +544,7 @@
<b>4.</b>
復閤數據類型
複合數據類型
</a>
@@ -857,7 +857,7 @@
<b>6.2.</b>
基於指對象的方法
基於指對象的方法
</a>
@@ -887,7 +887,7 @@
<b>6.4.</b>
方法值和方法達式
方法值和方法達式
</a>
@@ -953,7 +953,7 @@
<b>7.1.</b>
接口是
接口是
</a>
@@ -1073,7 +1073,7 @@
<b>7.9.</b>
示例: 達式求值
示例: 達式求值
</a>
@@ -1103,7 +1103,7 @@
<b>7.11.</b>
基於類型斷言識錯誤類型
基於類型斷言識錯誤類型
</a>
@@ -1214,7 +1214,7 @@
<b>8.2.</b>
示例: 併的Clock服務
示例: 併的Clock服務
</a>
@@ -1229,7 +1229,7 @@
<b>8.3.</b>
示例: 併的Echo服務
示例: 併的Echo服務
</a>
@@ -1274,7 +1274,7 @@
<b>8.6.</b>
示例: 併的Web爬蟲
示例: 併的Web爬蟲
</a>
@@ -1289,7 +1289,7 @@
<b>8.7.</b>
基於select的多路
基於select的多路
</a>
@@ -1304,7 +1304,7 @@
<b>8.8.</b>
示例: 併的字典遍歷
示例: 併的字典遍歷
</a>
@@ -1319,7 +1319,7 @@
<b>8.9.</b>
的退齣
的退齣
</a>
@@ -1354,7 +1354,7 @@
<b>9.</b>
基於共享變量的併
基於共享變量的併
</a>
@@ -1415,7 +1415,7 @@
<b>9.4.</b>
內存
內存
</a>
@@ -1460,7 +1460,7 @@
<b>9.7.</b>
示例: 併的非阻塞緩存
示例: 併的非阻塞緩存
</a>
@@ -1475,7 +1475,7 @@
<b>9.8.</b>
Goroutines和
Goroutines和
</a>
@@ -1748,7 +1748,7 @@
<b>12.1.</b>
何需要反射?
何需要反射?
</a>
@@ -1793,7 +1793,7 @@
<b>12.4.</b>
示例: 編碼S達式
示例: 編碼S達式
</a>
@@ -1823,7 +1823,7 @@
<b>12.6.</b>
示例: 解碼S達式
示例: 解碼S達式
</a>
@@ -1975,50 +1975,14 @@
</li>
<li class="chapter " data-level="14" data-path="exercise/ex.html">
<a href="../exercise/ex.html">
<i class="fa fa-check"></i>
<b>14.</b>
習題解答
</a>
<ul class="articles">
<li class="chapter " data-level="14.1" data-path="exercise/ex-ch1.html">
<a href="../exercise/ex-ch1.html">
<i class="fa fa-check"></i>
<b>14.1.</b>
第一章 入門
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="15" data-path="errata.html">
<li class="chapter " data-level="14" data-path="errata.html">
<a href="../errata.html">
<i class="fa fa-check"></i>
<b>15.</b>
<b>14.</b>
勘誤
</a>
@@ -2060,8 +2024,8 @@
<section class="normal" id="section-">
<h2 id="72-&#x63A5;&#x53E3;&#x985E;&#x578B;">7.2. &#x63A5;&#x53E3;&#x985E;&#x578B;</h2>
<p>&#x63A5;&#x53E3;&#x985E;&#x578B;&#x5177;&#x9AD4;&#x63CF;&#x8FF0;&#x4E86;&#x4E00;&#x7E6B;&#x5217;&#x65B9;&#x6CD5;&#x7684;&#x96C6;&#x95A4;&#xFF0C;&#x4E00;&#x500B;&#x5BE6;&#x73FE;&#x4E86;&#x9019;&#x4E9B;&#x65B9;&#x6CD5;&#x7684;&#x5177;&#x9AD4;&#x985E;&#x578B;&#x662F;&#x9019;&#x500B;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x7684;&#x5BE6;&#x4F8B;&#x3002;</p>
<p>io.Writer&#x985E;&#x578B;&#x662F;&#x7528;&#x7684;&#x6700;&#x5EE3;&#x6C3E;&#x7684;&#x63A5;&#x53E3;&#x4E4B;&#x4E00;&#xFF0C;&#x56E0;&#x70BA;&#x5B83;&#x63D0;&#x4F9B;&#x4E86;&#x6240;&#x6709;&#x7684;&#x985E;&#x578B;&#x5BEB;&#x5165;bytes&#x7684;&#x62BD;&#x8C61;&#xFF0C;&#x5305;&#x62EC;&#x6587;&#x4EF6;&#x985E;&#x578B;&#xFF0C;&#x5167;&#x5B58;&#x7DE9;&#x885D;&#x5340;&#xFF0C;&#x7DB2;&#x7D61;&#x93C8;&#x63A5;&#xFF0C;HTTP&#x5BA2;&#x6236;&#x7AEF;&#xFF0C;&#x58D3;&#x7E2E;&#x5DE5;&#x5177;&#xFF0C;&#x54C8;&#x5E0C;&#x7B49;&#x7B49;&#x3002;io&#x5305;&#x4E2D;&#x5B9A;&#x7FA9;&#x4E86;&#x5F88;&#x591A;&#x5176;&#x5B83;&#x6709;&#x7528;&#x7684;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x3002;Reader&#x53EF;&#x4EE5;&#x4EE3;&#x9336;&#x4EFB;&#x610F;&#x53EF;&#x4EE5;&#x8B80;&#x53D6;bytes&#x7684;&#x985E;&#x578B;&#xFF0C;Closer&#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x610F;&#x53EF;&#x4EE5;&#x95DC;&#x9589;&#x7684;&#x503C;&#xFF0C;&#x4F8B;&#x5982;&#x4E00;&#x500B;&#x6587;&#x4EF6;&#x6216;&#x662F;&#x7DB2;&#x7D61;&#x93C8;&#x63A5;&#x3002;&#xFF08;&#x5230;&#x73FE;&#x5728;&#x4F60;&#x53EF;&#x80FD;&#x8A3B;&#x610F;&#x5230;&#x4E86;&#x5F88;&#x591A;Go&#x8A9E;&#x8A00;&#x4E2D;&#x55AE;&#x65B9;&#x6CD5;&#x63A5;&#x53E3;&#x7684;&#x547D;&#x540D;&#x7FD2;&#x6163;&#xFF09;</p>
<p>&#x63A5;&#x53E3;&#x985E;&#x578B;&#x5177;&#x9AD4;&#x63CF;&#x8FF0;&#x4E86;&#x4E00;&#x7E6B;&#x5217;&#x65B9;&#x6CD5;&#x7684;&#x96C6;&#x5408;&#xFF0C;&#x4E00;&#x500B;&#x5BE6;&#x73FE;&#x4E86;&#x9019;&#x4E9B;&#x65B9;&#x6CD5;&#x7684;&#x5177;&#x9AD4;&#x985E;&#x578B;&#x662F;&#x9019;&#x500B;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x7684;&#x5BE6;&#x4F8B;&#x3002;</p>
<p>io.Writer&#x985E;&#x578B;&#x662F;&#x7528;&#x7684;&#x6700;&#x5EE3;&#x6CDB;&#x7684;&#x63A5;&#x53E3;&#x4E4B;&#x4E00;&#xFF0C;&#x56E0;&#x7232;&#x5B83;&#x63D0;&#x4F9B;&#x4E86;&#x6240;&#x6709;&#x7684;&#x985E;&#x578B;&#x5BEB;&#x5165;bytes&#x7684;&#x62BD;&#x8C61;&#xFF0C;&#x5305;&#x62EC;&#x6587;&#x4EF6;&#x985E;&#x578B;&#xFF0C;&#x5167;&#x5B58;&#x7DE9;&#x885D;&#x5340;&#xFF0C;&#x7DB2;&#x7D61;&#x93C8;&#x63A5;&#xFF0C;HTTP&#x5BA2;&#x6236;&#x7AEF;&#xFF0C;&#x58D3;&#x7E2E;&#x5DE5;&#x5177;&#xFF0C;&#x54C8;&#x5E0C;&#x7B49;&#x7B49;&#x3002;io&#x5305;&#x4E2D;&#x5B9A;&#x7FA9;&#x4E86;&#x5F88;&#x591A;&#x5176;&#x5B83;&#x6709;&#x7528;&#x7684;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x3002;Reader&#x53EF;&#x4EE5;&#x4EE3;&#x8868;&#x4EFB;&#x610F;&#x53EF;&#x4EE5;&#x8B80;&#x53D6;bytes&#x7684;&#x985E;&#x578B;&#xFF0C;Closer&#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x610F;&#x53EF;&#x4EE5;&#x95DC;&#x9589;&#x7684;&#x503C;&#xFF0C;&#x4F8B;&#x5982;&#x4E00;&#x500B;&#x6587;&#x4EF6;&#x6216;&#x662F;&#x7DB2;&#x7D61;&#x93C8;&#x63A5;&#x3002;&#xFF08;&#x5230;&#x73FE;&#x5728;&#x4F60;&#x53EF;&#x80FD;&#x8A3B;&#x610F;&#x5230;&#x4E86;&#x5F88;&#x591A;Go&#x8A9E;&#x8A00;&#x4E2D;&#x55AE;&#x65B9;&#x6CD5;&#x63A5;&#x53E3;&#x7684;&#x547D;&#x540D;&#x7FD2;&#x6163;&#xFF09;</p>
<pre><code class="lang-go"><span class="hljs-keyword">package</span> io
<span class="hljs-keyword">type</span> Reader <span class="hljs-keyword">interface</span> {
Read(p []<span class="hljs-typename">byte</span>) (n <span class="hljs-typename">int</span>, err error)
@@ -2070,7 +2034,7 @@
Close() error
}
</code></pre>
<p>&#x5728;&#x5F80;&#x4E0B;&#x770B;&#xFF0C;&#x6211;&#x5011;&#x9AEE;&#x73FE;&#x6709;&#x4E9B;&#x65B0;&#x7684;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x901A;&#x904E;&#x7D44;&#x95A4;&#x5DF2;&#x7D93;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x4F86;&#x5B9A;&#x7FA9;&#x3002;&#x4E0B;&#x9EAB;&#x662F;&#x5169;&#x500B;&#x4F8B;&#x5B50;&#xFF1A;</p>
<p>&#x5728;&#x5F80;&#x4E0B;&#x770B;&#xFF0C;&#x6211;&#x5011;&#x767C;&#x73FE;&#x6709;&#x4E9B;&#x65B0;&#x7684;&#x63A5;&#x53E3;&#x985E;&#x578B;&#x901A;&#x904E;&#x7D44;&#x5408;&#x5DF2;&#x7D93;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x4F86;&#x5B9A;&#x7FA9;&#x3002;&#x4E0B;&#x9762;&#x662F;&#x5169;&#x500B;&#x4F8B;&#x5B50;&#xFF1A;</p>
<pre><code class="lang-go">
<span class="hljs-keyword">type</span> ReadWriter <span class="hljs-keyword">interface</span> {
Reader
@@ -2082,21 +2046,21 @@
Closer
}
</code></pre>
<p>&#x4E0A;&#x9EAB;&#x7528;&#x5230;&#x7684;&#x8A9E;&#x6CD5;&#x548C;&#x7D50;&#x69CB;&#x5167;&#x5D4C;&#x76F8;&#x4F3C;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x9019;&#x7A2E;&#x65B9;&#x5F0F;&#x4EE5;&#x4E00;&#x500B;&#x7C21;&#x5BEB;&#x547D;&#x540D;&#x53E6;&#x4E00;&#x500B;&#x63A5;&#x53E3;&#xFF0C;&#x800C;&#x4E0D;&#x7528;&#x8072;&#x660E;&#x5B83;&#x6240;&#x6709;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x9019;&#x7A2E;&#x65B9;&#x5F0F;&#x672C;&#x7A31;&#x70BA;&#x63A5;&#x53E3;&#x5167;&#x5D4C;&#x3002;&#x76E1;&#x7BA1;&#x7565;&#x5931;&#x7C21;&#x6F54;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x50CF;&#x4E0B;&#x9EAB;&#x9019;&#x6A23;&#xFF0C;&#x4E0D;&#x4F7F;&#x7528;&#x5167;&#x5D4C;&#x4F86;&#x8072;&#x660E;io.Writer&#x63A5;&#x53E3;&#x3002;</p>
<p>&#x4E0A;&#x9762;&#x7528;&#x5230;&#x7684;&#x8A9E;&#x6CD5;&#x548C;&#x7D50;&#x69CB;&#x5167;&#x5D4C;&#x76F8;&#x4F3C;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x9019;&#x7A2E;&#x65B9;&#x5F0F;&#x4EE5;&#x4E00;&#x500B;&#x7C21;&#x5BEB;&#x547D;&#x540D;&#x53E6;&#x4E00;&#x500B;&#x63A5;&#x53E3;&#xFF0C;&#x800C;&#x4E0D;&#x7528;&#x8072;&#x660E;&#x5B83;&#x6240;&#x6709;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x9019;&#x7A2E;&#x65B9;&#x5F0F;&#x672C;&#x7A31;&#x7232;&#x63A5;&#x53E3;&#x5167;&#x5D4C;&#x3002;&#x76E1;&#x7BA1;&#x7565;&#x5931;&#x7C21;&#x6F54;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x50CF;&#x4E0B;&#x9762;&#x9019;&#x6A23;&#xFF0C;&#x4E0D;&#x4F7F;&#x7528;&#x5167;&#x5D4C;&#x4F86;&#x8072;&#x660E;io.Writer&#x63A5;&#x53E3;&#x3002;</p>
<pre><code class="lang-go"><span class="hljs-keyword">type</span> ReadWriter <span class="hljs-keyword">interface</span> {
Read(p []<span class="hljs-typename">byte</span>) (n <span class="hljs-typename">int</span>, err error)
Write(p []<span class="hljs-typename">byte</span>) (n <span class="hljs-typename">int</span>, err error)
}
</code></pre>
<p>&#x6216;&#x8005;&#x751A;&#x81F3;&#x4F7F;&#x7528;&#x7A2E;&#x6DF7;&#x95A4;&#x7684;&#x98A8;&#x683C;&#xFF1A;</p>
<p>&#x6216;&#x8005;&#x751A;&#x81F3;&#x4F7F;&#x7528;&#x7A2E;&#x6DF7;&#x5408;&#x7684;&#x98A8;&#x683C;&#xFF1A;</p>
<pre><code class="lang-go"><span class="hljs-keyword">type</span> ReadWriter <span class="hljs-keyword">interface</span> {
Read(p []<span class="hljs-typename">byte</span>) (n <span class="hljs-typename">int</span>, err error)
Writer
}
</code></pre>
<p>&#x4E0A;&#x9EAB;3&#x7A2E;&#x5B9A;&#x7FA9;&#x65B9;&#x5F0F;&#x90FD;&#x662F;&#x4E00;&#x6A23;&#x7684;&#x6548;&#x679C;&#x3002;&#x65B9;&#x6CD5;&#x7684;&#x9806;&#x5E8F;&#x8B8A;&#x5316;&#x4E5F;&#x6C92;&#x6709;&#x5F71;&#x97FF;&#xFF0C;&#x552F;&#x4E00;&#x91CD;&#x8981;&#x7684;&#x5C31;&#x662F;&#x9019;&#x500B;&#x96C6;&#x95A4;&#x88CF;&#x9EAB;&#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<p>&#x4E0A;&#x9762;3&#x7A2E;&#x5B9A;&#x7FA9;&#x65B9;&#x5F0F;&#x90FD;&#x662F;&#x4E00;&#x6A23;&#x7684;&#x6548;&#x679C;&#x3002;&#x65B9;&#x6CD5;&#x7684;&#x9806;&#x5E8F;&#x8B8A;&#x5316;&#x4E5F;&#x6C92;&#x6709;&#x5F71;&#x97FF;&#xFF0C;&#x552F;&#x4E00;&#x91CD;&#x8981;&#x7684;&#x5C31;&#x662F;&#x9019;&#x500B;&#x96C6;&#x5408;&#x91CC;&#x9762;&#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<p>&#x7DF4;&#x7FD2;7.4:strings.NewReader&#x51FD;&#x6578;&#x901A;&#x904E;&#x8B80;&#x53D6;&#x4E00;&#x500B;string&#x53C3;&#x6578;&#x8FD4;&#x8FF4;&#x4E00;&#x500B;&#x6EFF;&#x8DB3;io.Reader&#x63A5;&#x53E3;&#x985E;&#x578B;&#x7684;&#x503C;&#xFF08;&#x548C;&#x5176;&#x5B83;&#x503C;&#xFF09;&#x3002;&#x5BE6;&#x73FE;&#x4E00;&#x500B;&#x7C21;&#x55AE;&#x7248;&#x672C;&#x7684;NewReader&#xFF0C;&#x4F75;&#x7528;&#x5B83;&#x4F86;&#x69CB;&#x9020;&#x4E00;&#x500B;&#x63A5;&#x6536;&#x5B57;&#x7B26;&#x4E32;&#x8F38;&#x5165;&#x7684;HTML&#x89E3;&#x6790;&#x5668;&#xFF08;&#xA7;5.2&#xFF09;</p>
<p>&#x7DF4;&#x7FD2;7.5:io&#x5305;&#x88CF;&#x9EAB;&#x7684;LimitReader&#x51FD;&#x6578;&#x63A5;&#x6536;&#x4E00;&#x500B;io.Reader&#x63A5;&#x53E3;&#x985E;&#x578B;&#x7684;r&#x548C;&#x5B57;&#x7BC0;&#x6578;n&#xFF0C;&#x4F75;&#x4E14;&#x8FD4;&#x8FF4;&#x53E6;&#x4E00;&#x500B;&#x5F9E;r&#x4E2D;&#x8B80;&#x53D6;&#x5B57;&#x7BC0;&#x4F46;&#x662F;&#x7576;&#x8B80;&#x5B8C;n&#x500B;&#x5B57;&#x7BC0;&#x5F8C;&#x5C31;&#x9336;&#x793A;&#x8B80;&#x5230;&#x6587;&#x4EF6;&#x7D50;&#x675F;&#x7684;Reader&#x3002;&#x5BE6;&#x73FE;&#x9019;&#x500B;LimitReader&#x51FD;&#x6578;&#xFF1A;</p>
<p>&#x7DF4;&#x7FD2;7.5:io&#x5305;&#x91CC;&#x9762;&#x7684;LimitReader&#x51FD;&#x6578;&#x63A5;&#x6536;&#x4E00;&#x500B;io.Reader&#x63A5;&#x53E3;&#x985E;&#x578B;&#x7684;r&#x548C;&#x5B57;&#x7BC0;&#x6578;n&#xFF0C;&#x4F75;&#x4E14;&#x8FD4;&#x8FF4;&#x53E6;&#x4E00;&#x500B;&#x5F9E;r&#x4E2D;&#x8B80;&#x53D6;&#x5B57;&#x7BC0;&#x4F46;&#x662F;&#x7576;&#x8B80;&#x5B8C;n&#x500B;&#x5B57;&#x7BC0;&#x5F8C;&#x5C31;&#x8868;&#x793A;&#x8B80;&#x5230;&#x6587;&#x4EF6;&#x7D50;&#x675F;&#x7684;Reader&#x3002;&#x5BE6;&#x73FE;&#x9019;&#x500B;LimitReader&#x51FD;&#x6578;&#xFF1A;</p>
<pre><code class="lang-go"><span class="hljs-keyword">func</span> LimitReader(r io.Reader, n <span class="hljs-typename">int64</span>) io.Reader
</code></pre>
@@ -2109,7 +2073,7 @@
</div>
<a href="../ch7/ch7-01.html" class="navigation navigation-prev " aria-label="Previous page: 接口是約"><i class="fa fa-angle-left"></i></a>
<a href="../ch7/ch7-01.html" class="navigation navigation-prev " aria-label="Previous page: 接口是約"><i class="fa fa-angle-left"></i></a>
<a href="../ch7/ch7-03.html" class="navigation navigation-next " aria-label="Next page: 實現接口的條件"><i class="fa fa-angle-right"></i></a>