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="10.1" data-chapter-title="簡介" data-filepath="ch10/ch10-01.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.1" data-chapter-title="簡介" data-filepath="ch10/ch10-01.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,10 +2024,10 @@
<section class="normal" id="section-">
<h2 id="101-&#x7C21;&#x4ECB;">10.1. &#x7C21;&#x4ECB;</h2>
<p>&#x4EFB;&#x4F55;&#x5305;&#x7E6B;&#x7D71;&#x8A2D;&#x8A08;&#x7684;&#x76EE;&#x7684;&#x90FD;&#x662F;&#x70BA;&#x4E86;&#x4F7F;&#x5927;&#x578B;&#x7A0B;&#x5E8F;&#x7684;&#x8A2D;&#x8A08;&#x548C;&#x7DAD;&#x8B77;, &#x901A;&#x904E;&#x5C07;&#x4E00;&#x7D44;&#x76F8;&#x95DC;&#x7684;&#x7279;&#x6027;&#x653E;&#x9032;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x55AE;&#x5143;&#x4EE5;&#x4FBF;&#x65BC;&#x7406;&#x89E3;&#x548C;&#x66F4;&#x65B0;, &#x8855;&#x6642;&#x4FDD;&#x6301;&#x548C;&#x7A0B;&#x5E8F;&#x4E2D;&#x5176;&#x4ED6;&#x55AE;&#x5143;&#x7684;&#x76F8;&#x5C0D;&#x7368;&#x7ACB;&#x6027;. &#x9019;&#x7A2E;&#x6A21;&#x584A;&#x5316;&#x7684;&#x7279;&#x6027;&#x5141;&#x8A31;&#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x7684;&#x4E0D;&#x8855;&#x9805;&#x76EE;&#x5171;&#x4EAB;&#x548C;&#x91CD;&#x7528;, &#x5728;&#x9805;&#x76EE;&#x5167;&#x751A;&#x81F3;&#x5168;&#x7403;&#x7D71;&#x4E00;&#x7684;&#x5206;&#x9AEE;.</p>
<p>&#x6BCF;&#x500B;&#x5305;&#x5B9A;&#x7FA9;&#x4E86;&#x4E00;&#x500B;&#x4E0D;&#x8855;&#x7684;&#x540D;&#x7A31;&#x7A7A;&#x9593;&#x7528;&#x65BC;&#x5B83;&#x5167;&#x90E8;&#x7684;&#x6BCF;&#x500B;&#x6A19;&#x8B58;&#x7B26;. &#x6BCF;&#x500B;&#x540D;&#x7A31;&#x95DC;&#x806F;&#x5230;&#x4E00;&#x500B;&#x7279;&#x5B9A;&#x7684;&#x5305;, &#x6211;&#x5011;&#x6700;&#x597D;&#x7D66;&#x985E;&#x578B;, &#x51FD;&#x6578;&#x7B49;&#x9078;&#x64C7;&#x7C21;&#x77ED;&#x6E05;&#x6670;&#x7684;&#x540D;&#x5B57;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x5728;&#x6211;&#x5011;&#x4F7F;&#x7528;&#x5B83;&#x5011;&#x7684;&#x6642;&#x5019;&#x6E1B;&#x5C11;&#x548C;&#x5176;&#x4ED6;&#x90E8;&#x5206;&#x540D;&#x5B57;&#x7684;&#x885D;&#x7A81;.</p>
<p>&#x5305;&#x9084;&#x901A;&#x904E;&#x63A7;&#x88FD;&#x5305;&#x5167;&#x540D;&#x5B57;&#x7684;&#x53EF;&#x898B;&#x6027;&#x548C;&#x662F;&#x5426;&#x5C0E;&#x9F63;&#x4F86;&#x5BE6;&#x73FE;&#x5C01;&#x88DD;&#x7279;&#x6027;. &#x901A;&#x904E;&#x9650;&#x88FD;&#x5305;&#x6210;&#x54E1;&#x7684;&#x53EF;&#x898B;&#x6027;&#x4F75;&#x96B1;&#x85CF;&#x5305;API&#x7684;&#x5177;&#x9AD4;&#x5BE6;&#x73FE;, &#x5C07;&#x5141;&#x8A31;&#x5305;&#x7684;&#x7DAD;&#x8B77;&#x8005;&#x5728;&#x4E0D;&#x5F71;&#x97FF;&#x5916;&#x90E8;&#x5305;&#x7528;&#x6236;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#x8ABF;&#x6574;&#x5305;&#x7684;&#x5167;&#x90E8;&#x5BE6;&#x73FE;. &#x901A;&#x904E;&#x9650;&#x88FD;&#x5305;&#x5167;&#x8B8A;&#x91CF;&#x7684;&#x53EF;&#x898B;&#x6027;, &#x9084;&#x53EF;&#x4EE5;&#x63A7;&#x88FD;&#x7528;&#x6236;&#x901A;&#x904E;&#x67D0;&#x4E9B;&#x7279;&#x5B9A;&#x51FD;&#x6578;&#x4F86;&#x8A2A;&#x554F;&#x548C;&#x66F4;&#x65B0;&#x5167;&#x90E8;&#x8B8A;&#x91CF;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x4FDD;&#x8B49;&#x5167;&#x90E8;&#x8B8A;&#x91CF;&#x7684;&#x4E00;&#x7DFB;&#x6027;&#x548C;&#x4F75;&#x9AEE;&#x6642;&#x7684;&#x4E92;&#x65A5;&#x7D04;&#x675F;.</p>
<p>&#x7576;&#x6211;&#x5011;&#x8129;&#x6539;&#x4E86;&#x4E00;&#x500B;&#x6587;&#x4EF6;, &#x6211;&#x5011;&#x5FC5;&#x9B1A;&#x91CD;&#x65B0;&#x7DE8;&#x8B6F;&#x6539;&#x6587;&#x4EF6;&#x5C0D;&#x61C9;&#x7684;&#x5305;&#x548C;&#x6240;&#x4EE5;&#x4F9D;&#x8CF4;&#x8A72;&#x5305;&#x7684;&#x5176;&#x4ED6;&#x5305;.&#x537D;&#x4F7F;&#x662F;&#x5F9E;&#x982D;&#x69CB;&#x5EFA;, Go&#x7684;&#x7DE8;&#x8B6F;&#x5668;&#x4E5F;&#x660E;&#x986F;&#x5FEB;&#x65BC;&#x5176;&#x4ED6;&#x7DE8;&#x8B6F;&#x8A9E;&#x8A00;. Go&#x7684;&#x7DE8;&#x8B6F;&#x901F;&#x5EA6;&#x4E3B;&#x8981;&#x5F97;&#x76CA;&#x65BC;&#x4E09;&#x500B;&#x7279;&#x6027;. &#x7B2C;&#x4E00;&#x9EDE;, &#x6240;&#x6709;&#x5C0E;&#x5165;&#x7684;&#x5305;&#x5FC5;&#x9B1A;&#x5728;&#x6BCF;&#x500B;&#x6587;&#x4EF6;&#x7684;&#x958B;&#x982D;&#x986F;&#x5F0F;&#x8072;&#x660E;, &#x9019;&#x6A23;&#x7684;&#x8A71;&#x7DE8;&#x8B6F;&#x5668;&#x5C31;&#x6C92;&#x6709;&#x5FC5;&#x8981;&#x8B80;&#x53D6;&#x5206;&#x6790;&#x6574;&#x500B;&#x6587;&#x4EF6;&#x4F86;&#x5224;&#x65B7;&#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;. &#x7B2C;&#x4E8C;&#x9EDE;, &#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;&#x5F62;&#x6210;&#x4E00;&#x500B;&#x6709;&#x66CF;&#x7121;&#x74B0;&#x5716;, &#x56E0;&#x70BA;&#x6C92;&#x6709;&#x5FAA;&#x74B0;&#x4F9D;&#x8CF4;, &#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x88AB;&#x7368;&#x7ACB;&#x7DE8;&#x8B6F;, &#x5F88;&#x53EF;&#x80FD;&#x662F;&#x4F75;&#x9AEE;&#x7DE8;&#x8B6F;. &#x7B2C;&#x4E09;&#x9EDE;, &#x7DE8;&#x8B6F;&#x5F8C;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;&#x4E0D;&#x50C5;&#x50C5;&#x8A18;&#x5F54;&#x5305;&#x672C;&#x8EAB;&#x7684;&#x5C0E;&#x9F63;&#x4FE1;&#x606F;, &#x8855;&#x6642;&#x9084;&#x8A18;&#x5F54;&#x4E86;&#x5B83;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;. &#x56E0;&#x6B64;, &#x5728;&#x7DE8;&#x8B6F;&#x4E00;&#x500B;&#x5305;&#x7684;&#x6642;&#x5019;, &#x7DE8;&#x8B6F;&#x5668;&#x96BB;&#x9700;&#x8981;&#x8B80;&#x53D6;&#x6BCF;&#x500B;&#x76F4;&#x63A5;&#x5C0E;&#x5165;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;, &#x800C;&#x4E0D;&#x662F;&#x8981;&#x904D;&#x6B77;&#x6240;&#x6709;&#x4F9D;&#x8CF4;&#x7684;&#x7684;&#x6587;&#x4EF6;(&#x8B6F;&#x8A3B;: &#x5F88;&#x591A;&#x53EF;&#x80FD;&#x662F;&#x9593;&#x63A5;&#x4F9D;&#x8CF4;).</p>
<p>&#x4EFB;&#x4F55;&#x5305;&#x7E6B;&#x7D71;&#x8A2D;&#x8A08;&#x7684;&#x76EE;&#x7684;&#x90FD;&#x662F;&#x7232;&#x4E86;&#x4F7F;&#x5927;&#x578B;&#x7A0B;&#x5E8F;&#x7684;&#x8A2D;&#x8A08;&#x548C;&#x7DAD;&#x8B77;, &#x901A;&#x904E;&#x5C07;&#x4E00;&#x7D44;&#x76F8;&#x95DC;&#x7684;&#x7279;&#x6027;&#x653E;&#x9032;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x55AE;&#x5143;&#x4EE5;&#x4FBF;&#x65BC;&#x7406;&#x89E3;&#x548C;&#x66F4;&#x65B0;, &#x540C;&#x6642;&#x4FDD;&#x6301;&#x548C;&#x7A0B;&#x5E8F;&#x4E2D;&#x5176;&#x4ED6;&#x55AE;&#x5143;&#x7684;&#x76F8;&#x5C0D;&#x7368;&#x7ACB;&#x6027;. &#x9019;&#x7A2E;&#x6A21;&#x584A;&#x5316;&#x7684;&#x7279;&#x6027;&#x5141;&#x8A31;&#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x7684;&#x4E0D;&#x540C;&#x9805;&#x76EE;&#x5171;&#x4EAB;&#x548C;&#x91CD;&#x7528;, &#x5728;&#x9805;&#x76EE;&#x5167;&#x751A;&#x81F3;&#x5168;&#x7403;&#x7D71;&#x4E00;&#x7684;&#x5206;&#x767C;.</p>
<p>&#x6BCF;&#x500B;&#x5305;&#x5B9A;&#x7FA9;&#x4E86;&#x4E00;&#x500B;&#x4E0D;&#x540C;&#x7684;&#x540D;&#x7A31;&#x7A7A;&#x9593;&#x7528;&#x65BC;&#x5B83;&#x5167;&#x90E8;&#x7684;&#x6BCF;&#x500B;&#x6A19;&#x8B58;&#x7B26;. &#x6BCF;&#x500B;&#x540D;&#x7A31;&#x95DC;&#x806F;&#x5230;&#x4E00;&#x500B;&#x7279;&#x5B9A;&#x7684;&#x5305;, &#x6211;&#x5011;&#x6700;&#x597D;&#x7D66;&#x985E;&#x578B;, &#x51FD;&#x6578;&#x7B49;&#x9078;&#x64C7;&#x7C21;&#x77ED;&#x6E05;&#x6670;&#x7684;&#x540D;&#x5B57;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x5728;&#x6211;&#x5011;&#x4F7F;&#x7528;&#x5B83;&#x5011;&#x7684;&#x6642;&#x5019;&#x6E1B;&#x5C11;&#x548C;&#x5176;&#x4ED6;&#x90E8;&#x5206;&#x540D;&#x5B57;&#x7684;&#x885D;&#x7A81;.</p>
<p>&#x5305;&#x9084;&#x901A;&#x904E;&#x63A7;&#x88FD;&#x5305;&#x5167;&#x540D;&#x5B57;&#x7684;&#x53EF;&#x898B;&#x6027;&#x548C;&#x662F;&#x5426;&#x5C0E;&#x9F63;&#x4F86;&#x5BE6;&#x73FE;&#x5C01;&#x88DD;&#x7279;&#x6027;. &#x901A;&#x904E;&#x9650;&#x88FD;&#x5305;&#x6210;&#x54E1;&#x7684;&#x53EF;&#x898B;&#x6027;&#x4F75;&#x96B1;&#x85CF;&#x5305;API&#x7684;&#x5177;&#x9AD4;&#x5BE6;&#x73FE;, &#x5C07;&#x5141;&#x8A31;&#x5305;&#x7684;&#x7DAD;&#x8B77;&#x8005;&#x5728;&#x4E0D;&#x5F71;&#x97FF;&#x5916;&#x90E8;&#x5305;&#x7528;&#x6236;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#x8ABF;&#x6574;&#x5305;&#x7684;&#x5167;&#x90E8;&#x5BE6;&#x73FE;. &#x901A;&#x904E;&#x9650;&#x88FD;&#x5305;&#x5167;&#x8B8A;&#x91CF;&#x7684;&#x53EF;&#x898B;&#x6027;, &#x9084;&#x53EF;&#x4EE5;&#x63A7;&#x88FD;&#x7528;&#x6236;&#x901A;&#x904E;&#x67D0;&#x4E9B;&#x7279;&#x5B9A;&#x51FD;&#x6578;&#x4F86;&#x8A2A;&#x554F;&#x548C;&#x66F4;&#x65B0;&#x5167;&#x90E8;&#x8B8A;&#x91CF;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x4FDD;&#x8B49;&#x5167;&#x90E8;&#x8B8A;&#x91CF;&#x7684;&#x4E00;&#x81F4;&#x6027;&#x548C;&#x4F75;&#x767C;&#x6642;&#x7684;&#x4E92;&#x65A5;&#x7D04;&#x675F;.</p>
<p>&#x7576;&#x6211;&#x5011;&#x8129;&#x6539;&#x4E86;&#x4E00;&#x500B;&#x6587;&#x4EF6;, &#x6211;&#x5011;&#x5FC5;&#x9B1A;&#x91CD;&#x65B0;&#x7DE8;&#x8B6F;&#x6539;&#x6587;&#x4EF6;&#x5C0D;&#x61C9;&#x7684;&#x5305;&#x548C;&#x6240;&#x4EE5;&#x4F9D;&#x8CF4;&#x8A72;&#x5305;&#x7684;&#x5176;&#x4ED6;&#x5305;.&#x537D;&#x4F7F;&#x662F;&#x5F9E;&#x982D;&#x69CB;&#x5EFA;, Go&#x7684;&#x7DE8;&#x8B6F;&#x5668;&#x4E5F;&#x660E;&#x986F;&#x5FEB;&#x65BC;&#x5176;&#x4ED6;&#x7DE8;&#x8B6F;&#x8A9E;&#x8A00;. Go&#x7684;&#x7DE8;&#x8B6F;&#x901F;&#x5EA6;&#x4E3B;&#x8981;&#x5F97;&#x76CA;&#x65BC;&#x4E09;&#x500B;&#x7279;&#x6027;. &#x7B2C;&#x4E00;&#x9EDE;, &#x6240;&#x6709;&#x5C0E;&#x5165;&#x7684;&#x5305;&#x5FC5;&#x9B1A;&#x5728;&#x6BCF;&#x500B;&#x6587;&#x4EF6;&#x7684;&#x958B;&#x982D;&#x986F;&#x5F0F;&#x8072;&#x660E;, &#x9019;&#x6A23;&#x7684;&#x8A71;&#x7DE8;&#x8B6F;&#x5668;&#x5C31;&#x6C92;&#x6709;&#x5FC5;&#x8981;&#x8B80;&#x53D6;&#x5206;&#x6790;&#x6574;&#x500B;&#x6587;&#x4EF6;&#x4F86;&#x5224;&#x65B7;&#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;. &#x7B2C;&#x4E8C;&#x9EDE;, &#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;&#x5F62;&#x6210;&#x4E00;&#x500B;&#x6709;&#x5411;&#x7121;&#x74B0;&#x5716;, &#x56E0;&#x7232;&#x6C92;&#x6709;&#x5FAA;&#x74B0;&#x4F9D;&#x8CF4;, &#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x88AB;&#x7368;&#x7ACB;&#x7DE8;&#x8B6F;, &#x5F88;&#x53EF;&#x80FD;&#x662F;&#x4F75;&#x767C;&#x7DE8;&#x8B6F;. &#x7B2C;&#x4E09;&#x9EDE;, &#x7DE8;&#x8B6F;&#x5F8C;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;&#x4E0D;&#x50C5;&#x50C5;&#x8A18;&#x9332;&#x5305;&#x672C;&#x8EAB;&#x7684;&#x5C0E;&#x9F63;&#x4FE1;&#x606F;, &#x540C;&#x6642;&#x9084;&#x8A18;&#x9332;&#x4E86;&#x5B83;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;. &#x56E0;&#x6B64;, &#x5728;&#x7DE8;&#x8B6F;&#x4E00;&#x500B;&#x5305;&#x7684;&#x6642;&#x5019;, &#x7DE8;&#x8B6F;&#x5668;&#x96BB;&#x9700;&#x8981;&#x8B80;&#x53D6;&#x6BCF;&#x500B;&#x76F4;&#x63A5;&#x5C0E;&#x5165;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;, &#x800C;&#x4E0D;&#x662F;&#x8981;&#x904D;&#x6B77;&#x6240;&#x6709;&#x4F9D;&#x8CF4;&#x7684;&#x7684;&#x6587;&#x4EF6;(&#x8B6F;&#x8A3B;: &#x5F88;&#x591A;&#x53EF;&#x80FD;&#x662F;&#x9593;&#x63A5;&#x4F9D;&#x8CF4;).</p>
</section>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.2" data-chapter-title="導入路徑" data-filepath="ch10/ch10-02.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.2" data-chapter-title="導入路徑" data-filepath="ch10/ch10-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,7 +2024,7 @@
<section class="normal" id="section-">
<h2 id="102-&#x5C0E;&#x5165;&#x8DEF;&#x5F91;">10.2. &#x5C0E;&#x5165;&#x8DEF;&#x5F91;</h2>
<p>&#x6BCF;&#x500B;&#x5305;&#x662F;&#x7531;&#x4E00;&#x500B;&#x5168;&#x4FB7;&#x552F;&#x4E00;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x6240;&#x6A19;&#x8B58;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5B9A;&#x4F4D;.
<p>&#x6BCF;&#x500B;&#x5305;&#x662F;&#x7531;&#x4E00;&#x500B;&#x5168;&#x5C40;&#x552F;&#x4E00;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x6240;&#x6A19;&#x8B58;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5B9A;&#x4F4D;.
&#x9F63;&#x73FE;&#x5728;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x4E2D;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x4E5F;&#x662F;&#x5B57;&#x7B26;&#x4E32;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> (
<span class="hljs-string">&quot;fmt&quot;</span>
@@ -2072,8 +2036,8 @@
<span class="hljs-string">&quot;github.com/go-sql-driver/mysql&quot;</span>
)
</code></pre>
<p>&#x5C31;&#x50CF;&#x6211;&#x5011;&#x5728;2.6.1&#x7BC0;&#x63D0;&#x5230;&#x904E;&#x7684;, Go&#x8A9E;&#x8A00;&#x7684;&#x898F;&#x7BC4;&#x4F75;&#x6C92;&#x6709;&#x6307;&#x660E;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5177;&#x9AD4;&#x542B;&#x7FA9;, &#x5177;&#x9AD4;&#x542B;&#x7FA9;&#x662F;&#x7531;&#x69CB;&#x5EFA;&#x5DE5;&#x5177;&#x4F86;&#x89E3;&#x91CB;&#x7684;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x6DF1;&#x5165;&#x8A0E;&#x8AD6;Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x529F;&#x80FD;, &#x5305;&#x62EC;&#x5927;&#x50A2;&#x7D93;&#x5E38;&#x4F7F;&#x7528;&#x7684;&#x69CB;&#x5EFA;&#x6E2C;&#x8A66;&#x7B49;&#x529F;&#x80FD;. &#x7576;&#x7136;, &#x4E5F;&#x6709;&#x7B2C;&#x4E09;&#x65B9;&#x64F4;&#x5C55;&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x5B58;&#x5728;. &#x4F8B;&#x5982;, Google&#x516C;&#x53F8;&#x5167;&#x90E8;&#x7684;Go&#x78BC;&#x8FB2;, &#x5C31;&#x4F7F;&#x7528;&#x5167;&#x90E8;&#x7684;&#x591A;&#x8A9E;&#x8A00;&#x69CB;&#x5EFA;&#x7E6B;&#x7D71;, &#x7528;&#x4E0D;&#x8855;&#x7684;&#x898F;&#x5247;&#x4F86;&#x8655;&#x7406;&#x540D;&#x5B57;&#x548C;&#x5B9A;&#x4F4D;&#x5305;, &#x6307;&#x5B9A;&#x55AE;&#x5143;&#x6E2C;&#x8A66;&#x7B49;&#x5F85;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x7DCA;&#x5BC6;&#x9069;&#x914D;&#x4ED6;&#x5011;&#x5167;&#x90E8;&#x7684;&#x7E6B;&#x7D71;.</p>
<p>&#x5982;&#x679C;&#x4F60;&#x8A08;&#x5283;&#x5206;&#x4EAB;&#x6216;&#x9AEE;&#x4F48;&#x5305;, &#x90A3;&#x9EBC;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6700;&#x597D;&#x662F;&#x5168;&#x7403;&#x552F;&#x4E00;&#x7684;. &#x70BA;&#x4E86;&#x907F;&#x514D;&#x885D;&#x7A81;, &#x6240;&#x6709;&#x975E;&#x6A19;&#x6E96;&#x5EAB;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5EFA;&#x8B70;&#x4EE5;&#x6240;&#x5728;&#x7D44;&#x7E54;&#x7684;&#x4E92;&#x806F;&#x7DB2;&#x57DF;&#x540D;&#x70BA;&#x524D;&#x7DB4;; &#x9019;&#x6A23;&#x4E5F;&#x6709;&#x5229;&#x65BC;&#x5305;&#x7684;&#x6AA2;&#x7D22;. &#x4F8B;&#x5982;, &#x4E0A;&#x9EAB;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x5C0E;&#x5165;&#x4E86;Go&#x5718;&#x968A;&#x7DAD;&#x8B77;&#x7684;HTML&#x89E3;&#x6790;&#x5668;&#x548C;&#x4E00;&#x500B;&#x6D41;&#x884C;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x7DAD;&#x8B77;&#x7684;MySQL&#x9A45;&#x52D5;.</p>
<p>&#x5C31;&#x50CF;&#x6211;&#x5011;&#x5728;2.6.1&#x7BC0;&#x63D0;&#x5230;&#x904E;&#x7684;, Go&#x8A9E;&#x8A00;&#x7684;&#x898F;&#x8303;&#x4F75;&#x6C92;&#x6709;&#x6307;&#x660E;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5177;&#x9AD4;&#x542B;&#x7FA9;, &#x5177;&#x9AD4;&#x542B;&#x7FA9;&#x662F;&#x7531;&#x69CB;&#x5EFA;&#x5DE5;&#x5177;&#x4F86;&#x89E3;&#x91CB;&#x7684;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x6DF1;&#x5165;&#x8A0E;&#x8AD6;Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x529F;&#x80FD;, &#x5305;&#x62EC;&#x5927;&#x5BB6;&#x7D93;&#x5E38;&#x4F7F;&#x7528;&#x7684;&#x69CB;&#x5EFA;&#x6E2C;&#x8A66;&#x7B49;&#x529F;&#x80FD;. &#x7576;&#x7136;, &#x4E5F;&#x6709;&#x7B2C;&#x4E09;&#x65B9;&#x64F4;&#x5C55;&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x5B58;&#x5728;. &#x4F8B;&#x5982;, Google&#x516C;&#x53F8;&#x5167;&#x90E8;&#x7684;Go&#x78BC;&#x8FB2;, &#x5C31;&#x4F7F;&#x7528;&#x5167;&#x90E8;&#x7684;&#x591A;&#x8A9E;&#x8A00;&#x69CB;&#x5EFA;&#x7E6B;&#x7D71;, &#x7528;&#x4E0D;&#x540C;&#x7684;&#x898F;&#x5247;&#x4F86;&#x8655;&#x7406;&#x540D;&#x5B57;&#x548C;&#x5B9A;&#x4F4D;&#x5305;, &#x6307;&#x5B9A;&#x55AE;&#x5143;&#x6E2C;&#x8A66;&#x7B49;&#x5F85;, &#x9019;&#x6A23;&#x53EF;&#x4EE5;&#x7DCA;&#x5BC6;&#x9069;&#x914D;&#x4ED6;&#x5011;&#x5167;&#x90E8;&#x7684;&#x7E6B;&#x7D71;.</p>
<p>&#x5982;&#x679C;&#x4F60;&#x8A08;&#x5283;&#x5206;&#x4EAB;&#x6216;&#x767C;&#x5E03;&#x5305;, &#x90A3;&#x9EBD;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6700;&#x597D;&#x662F;&#x5168;&#x7403;&#x552F;&#x4E00;&#x7684;. &#x7232;&#x4E86;&#x907F;&#x514D;&#x885D;&#x7A81;, &#x6240;&#x6709;&#x975E;&#x6A19;&#x6E96;&#x5EAB;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5EFA;&#x8B70;&#x4EE5;&#x6240;&#x5728;&#x7D44;&#x7E54;&#x7684;&#x4E92;&#x806F;&#x7DB2;&#x57DF;&#x540D;&#x7232;&#x524D;&#x7DB4;; &#x9019;&#x6A23;&#x4E5F;&#x6709;&#x5229;&#x65BC;&#x5305;&#x7684;&#x6AA2;&#x7D22;. &#x4F8B;&#x5982;, &#x4E0A;&#x9762;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x5C0E;&#x5165;&#x4E86;Go&#x7CF0;&#x968A;&#x7DAD;&#x8B77;&#x7684;HTML&#x89E3;&#x6790;&#x5668;&#x548C;&#x4E00;&#x500B;&#x6D41;&#x884C;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x7DAD;&#x8B77;&#x7684;MySQL&#x9A45;&#x52D5;.</p>
</section>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.3" data-chapter-title="包聲明" data-filepath="ch10/ch10-03.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.3" data-chapter-title="包聲明" data-filepath="ch10/ch10-03.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,7 +2024,7 @@
<section class="normal" id="section-">
<h2 id="103-&#x5305;&#x8072;&#x660E;">10.3. &#x5305;&#x8072;&#x660E;</h2>
<p>&#x5728;&#x6BCF;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x958B;&#x982D;&#x90FD;&#x5FC5;&#x9B1A;&#x6709;&#x5305;&#x8072;&#x660E;. &#x4E3B;&#x8981;&#x7684;&#x76EE;&#x7684;&#x662F;&#x78BA;&#x5B9A;&#x7576;&#x524D;&#x5305;&#x88AB;&#x5176;&#x4ED6;&#x5305;&#x5C0E;&#x5165;&#x6642;&#x9ED8;&#x8A8D;&#x7684;&#x6A19;&#x8B58;&#x7B26;(&#x7A31;&#x70BA;&#x5305;&#x540D;).</p>
<p>&#x5728;&#x6BCF;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x958B;&#x982D;&#x90FD;&#x5FC5;&#x9B1A;&#x6709;&#x5305;&#x8072;&#x660E;. &#x4E3B;&#x8981;&#x7684;&#x76EE;&#x7684;&#x662F;&#x78BA;&#x5B9A;&#x7576;&#x524D;&#x5305;&#x88AB;&#x5176;&#x4ED6;&#x5305;&#x5C0E;&#x5165;&#x6642;&#x9ED8;&#x8A8D;&#x7684;&#x6A19;&#x8B58;&#x7B26;(&#x7A31;&#x7232;&#x5305;&#x540D;).</p>
<p>&#x4F8B;&#x5982;, math/rand &#x5305;&#x7684;&#x6BCF;&#x500B;&#x6587;&#x4EF6;&#x7684;&#x958B;&#x982D;&#x90FD;&#x662F; <code>package rand</code> &#x5305;&#x8072;&#x660E;, &#x6240;&#x6709; &#x7576;&#x4F60;&#x5C0E;&#x5165;&#x9019;&#x500B;&#x5305;, &#x4F60;&#x53EF;&#x4EE5;&#x7528; rand.Int, rand.Float64 &#x7684;&#x65B9;&#x5F0F;&#x8A2A;&#x554F;&#x5305;&#x7684;&#x6210;&#x54E1;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">package</span> main
@@ -2073,9 +2037,9 @@
fmt.Println(rand.Int())
}
</code></pre>
<p>&#x901A;&#x5E38;&#x4F86;&#x8AAA;, &#x9ED8;&#x8A8D;&#x7684;&#x5305;&#x540D;&#x5C31;&#x662F;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x540D;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;, &#x56E0;&#x6B64;&#x537D;&#x4F7F;&#x5169;&#x500B;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x4E0D;&#x8855;, &#x5B83;&#x5011;&#x4F9D;&#x7136;&#x53EF;&#x80FD;&#x6709;&#x4E00;&#x500B;&#x76F8;&#x8855;&#x7684;&#x5305;&#x540D;. &#x4F8B;&#x5982;, math/rand &#x548C; crypto/rand &#x5305;&#x7684;&#x540D;&#x5B57;&#x90FD;&#x662F; rand. &#x7A0D;&#x5F8C;&#x6211;&#x5011;&#x5C07;&#x770B;&#x5230;&#x5982;&#x4F55;&#x8855;&#x6642;&#x5C0E;&#x5165;&#x5169;&#x500B;&#x5305;&#x540D;&#x5B57;&#x76F8;&#x8855;&#x7684;&#x5305;.</p>
<p>&#x95DC;&#x65BC;&#x9ED8;&#x8A8D;&#x5305;&#x540D;&#x4E00;&#x822C;&#x63A1;&#x7528;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x540D;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;&#x7684;&#x7D04;&#x5B9A;&#x6709;&#x4E09;&#x7A2E;&#x4F8B;&#x5916;&#x60C5;&#x6CC1;. &#x7B2C;&#x4E00;&#x500B;&#x4F8B;&#x5916;&#x662F;&#x5305;&#x5C0D;&#x61C9;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;, &#x4E5F;&#x5C31;&#x662F; main &#x5305;, &#x9019;&#x6642;&#x5019;main&#x5305;&#x672C;&#x8EAB;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x662F;&#x7121;&#x95DC;&#x7DCA;&#x8981;&#x7684;. &#x9019;&#x662F;&#x7D66; go build (&#xA7;10.7.3) &#x69CB;&#x5EFA;&#x547D;&#x4EE4;&#x4E00;&#x500B;&#x4FE1;&#x606F;, &#x5FC5;&#x9B1A;&#x8ABF;&#x7528;&#x9023;&#x63A5;&#x5668;&#x751F;&#x6210;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;.</p>
<p>&#x7B2C;&#x4E8C;&#x500B;&#x4F8B;&#x5916;&#x662F;&#x5305;&#x6240;&#x5728;&#x7684;&#x76EE;&#x5F54;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x4E00;&#x4E9B;&#x6587;&#x4EF6;&#x540D;&#x662F;&#x4EE5;<em>test.go&#x70BA;&#x5F8C;&#x7DB4;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;(&#x8B6F;&#x8A3B;: &#x524D;&#x9EAB;&#x5FC5;&#x9B1A;&#x6709;&#x5176;&#x4ED6;&#x7684;&#x5B57;&#x7B26;, &#x56E0;&#x70BA; </em> &#x524D;&#x7DB4;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x53EF;&#x80FD;&#x662F;&#x88AB;&#x5FFD;&#x7565;&#x7684;.), &#x4F75;&#x4E14;&#x9019;&#x4E9B;&#x6E90;&#x6587;&#x4EF6;&#x8072;&#x660E;&#x7684;&#x5305;&#x540D;&#x4E5F;&#x662F;&#x4EE5;_test&#x70BA;&#x5F8C;&#x7DB4;&#x540D;&#x7684;. &#x9019;&#x7A2E;&#x76EE;&#x5F54;&#x53EF;&#x4EE5;&#x5B9A;&#x7FA9;&#x5169;&#x500B;&#x5305;: &#x4E00;&#x500B;&#x666E;&#x901A;&#x5305;, &#x52A0;&#x4E00;&#x500B;&#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;. &#x4EE5; _test &#x70BA;&#x5F8C;&#x7DB4;&#x5305;&#x540D;&#x7684;&#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;&#x7531; go test &#x547D;&#x4EE4;&#x7368;&#x7ACB;&#x7DE8;&#x8B6F;, &#x5169;&#x500B;&#x5305;&#x662F;&#x76F8;&#x4E92;&#x7368;&#x7ACB;&#x7684;. &#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;&#x4E00;&#x822C;&#x7528;&#x4F86;&#x907F;&#x514D;&#x6E2C;&#x8A66;&#x4EE3;&#x78BC;&#x4E2D;&#x7684;&#x5C0E;&#x5165;&#x5305;&#x7684;&#x5FAA;&#x74B0;&#x5C0E;&#x5165;&#x4F9D;&#x8CF4;, &#x5177;&#x9AD4;&#x7D30;&#x7BC0;&#x6211;&#x5011;&#x5C07;&#x5728; 11.2.4 &#x4E2D;&#x4ECB;&#x7D39;.</p>
<p>&#x901A;&#x5E38;&#x4F86;&#x8AAC;, &#x9ED8;&#x8A8D;&#x7684;&#x5305;&#x540D;&#x5C31;&#x662F;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x540D;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;, &#x56E0;&#x6B64;&#x537D;&#x4F7F;&#x5169;&#x500B;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x4E0D;&#x540C;, &#x5B83;&#x5011;&#x4F9D;&#x7136;&#x53EF;&#x80FD;&#x6709;&#x4E00;&#x500B;&#x76F8;&#x540C;&#x7684;&#x5305;&#x540D;. &#x4F8B;&#x5982;, math/rand &#x548C; crypto/rand &#x5305;&#x7684;&#x540D;&#x5B57;&#x90FD;&#x662F; rand. &#x7A0D;&#x5F8C;&#x6211;&#x5011;&#x5C07;&#x770B;&#x5230;&#x5982;&#x4F55;&#x540C;&#x6642;&#x5C0E;&#x5165;&#x5169;&#x500B;&#x5305;&#x540D;&#x5B57;&#x76F8;&#x540C;&#x7684;&#x5305;.</p>
<p>&#x95DC;&#x65BC;&#x9ED8;&#x8A8D;&#x5305;&#x540D;&#x4E00;&#x822C;&#x91C7;&#x7528;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x540D;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;&#x7684;&#x7D04;&#x5B9A;&#x6709;&#x4E09;&#x7A2E;&#x4F8B;&#x5916;&#x60C5;&#x6CC1;. &#x7B2C;&#x4E00;&#x500B;&#x4F8B;&#x5916;&#x662F;&#x5305;&#x5C0D;&#x61C9;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;, &#x4E5F;&#x5C31;&#x662F; main &#x5305;, &#x9019;&#x6642;&#x5019;main&#x5305;&#x672C;&#x8EAB;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x662F;&#x7121;&#x95DC;&#x7DCA;&#x8981;&#x7684;. &#x9019;&#x662F;&#x7D66; go build (&#xA7;10.7.3) &#x69CB;&#x5EFA;&#x547D;&#x4EE4;&#x4E00;&#x500B;&#x4FE1;&#x606F;, &#x5FC5;&#x9B1A;&#x8ABF;&#x7528;&#x9023;&#x63A5;&#x5668;&#x751F;&#x6210;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;.</p>
<p>&#x7B2C;&#x4E8C;&#x500B;&#x4F8B;&#x5916;&#x662F;&#x5305;&#x6240;&#x5728;&#x7684;&#x76EE;&#x9332;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x4E00;&#x4E9B;&#x6587;&#x4EF6;&#x540D;&#x662F;&#x4EE5;<em>test.go&#x7232;&#x5F8C;&#x7DB4;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;(&#x8B6F;&#x8A3B;: &#x524D;&#x9762;&#x5FC5;&#x9B1A;&#x6709;&#x5176;&#x4ED6;&#x7684;&#x5B57;&#x7B26;, &#x56E0;&#x7232; </em> &#x524D;&#x7DB4;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x53EF;&#x80FD;&#x662F;&#x88AB;&#x5FFD;&#x7565;&#x7684;.), &#x4F75;&#x4E14;&#x9019;&#x4E9B;&#x6E90;&#x6587;&#x4EF6;&#x8072;&#x660E;&#x7684;&#x5305;&#x540D;&#x4E5F;&#x662F;&#x4EE5;_test&#x7232;&#x5F8C;&#x7DB4;&#x540D;&#x7684;. &#x9019;&#x7A2E;&#x76EE;&#x9332;&#x53EF;&#x4EE5;&#x5B9A;&#x7FA9;&#x5169;&#x500B;&#x5305;: &#x4E00;&#x500B;&#x666E;&#x901A;&#x5305;, &#x52A0;&#x4E00;&#x500B;&#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;. &#x4EE5; _test &#x7232;&#x5F8C;&#x7DB4;&#x5305;&#x540D;&#x7684;&#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;&#x7531; go test &#x547D;&#x4EE4;&#x7368;&#x7ACB;&#x7DE8;&#x8B6F;, &#x5169;&#x500B;&#x5305;&#x662F;&#x76F8;&#x4E92;&#x7368;&#x7ACB;&#x7684;. &#x5916;&#x90E8;&#x6E2C;&#x8A66;&#x5305;&#x4E00;&#x822C;&#x7528;&#x4F86;&#x907F;&#x514D;&#x6E2C;&#x8A66;&#x4EE3;&#x78BC;&#x4E2D;&#x7684;&#x5C0E;&#x5165;&#x5305;&#x7684;&#x5FAA;&#x74B0;&#x5C0E;&#x5165;&#x4F9D;&#x8CF4;, &#x5177;&#x9AD4;&#x7D30;&#x7BC0;&#x6211;&#x5011;&#x5C07;&#x5728; 11.2.4 &#x4E2D;&#x4ECB;&#x7D39;.</p>
<p>&#x7B2C;&#x4E09;&#x500B;&#x4F8B;&#x5916;&#x662F;&#x4E00;&#x4E9B;&#x4F9D;&#x8CF4;&#x7248;&#x672C;&#x865F;&#x7684;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x6703;&#x5728;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x5F8C;&#x8FFD;&#x52A0;&#x7248;&#x672C;&#x865F;&#x4FE1;&#x606F;, &#x4F8B;&#x5982; &quot;gopkg.in/yaml.v2&quot;. &#x9019;&#x7A2E;&#x60C5;&#x6CC1;&#x4E0B;&#x5305;&#x7684;&#x540D;&#x5B57;&#x4F75;&#x4E0D;&#x5305;&#x542B;&#x7248;&#x672C;&#x865F;&#x5F8C;&#x7DB4;, &#x96BB;&#x662F;yaml.</p>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.4" data-chapter-title="導入聲明" data-filepath="ch10/ch10-04.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.4" data-chapter-title="導入聲明" data-filepath="ch10/ch10-04.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,7 +2024,7 @@
<section class="normal" id="section-">
<h2 id="104-&#x5C0E;&#x5165;&#x8072;&#x660E;">10.4. &#x5C0E;&#x5165;&#x8072;&#x660E;</h2>
<p>&#x4E00;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x53EF;&#x4EE5;&#x5728;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;&#x4E4B;&#x5F8C;, &#x5176;&#x4ED6;&#x975E;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x4E4B;&#x524D;, &#x5305;&#x542B;&#x96F6;&#x5230;&#x591A;&#x500B;&#x5C0E;&#x5165;&#x5305;&#x8072;&#x660E;. &#x6BCF;&#x500B;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x53EF;&#x4EE5;&#x55AE;&#x7368;&#x6307;&#x5B9A;&#x4E00;&#x500B;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x901A;&#x904E;&#x5713;&#x62EC;&#x865F;&#x5305;&#x542B;&#x6307;&#x5B9A;&#x591A;&#x500B;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x4E0B;&#x9EAB;&#x5169;&#x500B;&#x5C0E;&#x5165;&#x5F62;&#x5F0F;&#x662F;&#x7B49;&#x50F9;&#x7684;, &#x4F46;&#x662F;&#x7B2C;&#x4E8C;&#x7A2E;&#x5F62;&#x5F0F;&#x66F4;&#x70BA;&#x5E38;&#x898B;.</p>
<p>&#x4E00;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x53EF;&#x4EE5;&#x5728;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;&#x4E4B;&#x5F8C;, &#x5176;&#x4ED6;&#x975E;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x4E4B;&#x524D;, &#x5305;&#x542B;&#x96F6;&#x5230;&#x591A;&#x500B;&#x5C0E;&#x5165;&#x5305;&#x8072;&#x660E;. &#x6BCF;&#x500B;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x53EF;&#x4EE5;&#x55AE;&#x7368;&#x6307;&#x5B9A;&#x4E00;&#x500B;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x901A;&#x904E;&#x5713;&#x62EC;&#x865F;&#x5305;&#x542B;&#x6307;&#x5B9A;&#x591A;&#x500B;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x4E0B;&#x9762;&#x5169;&#x500B;&#x5C0E;&#x5165;&#x5F62;&#x5F0F;&#x662F;&#x7B49;&#x50F9;&#x7684;, &#x4F46;&#x662F;&#x7B2C;&#x4E8C;&#x7A2E;&#x5F62;&#x5F0F;&#x66F4;&#x7232;&#x5E38;&#x898B;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> <span class="hljs-string">&quot;fmt&quot;</span>
<span class="hljs-keyword">import</span> <span class="hljs-string">&quot;os&quot;</span>
@@ -2069,7 +2033,7 @@
<span class="hljs-string">&quot;os&quot;</span>
)
</code></pre>
<p>&#x5C0E;&#x5165;&#x7684;&#x5305;&#x4E4B;&#x9593;&#x53EF;&#x4EE5;&#x901A;&#x904E;&#x6DFB;&#x52A0;&#x7A7A;&#x884C;&#x4F86;&#x5206;&#x7D44;; &#x901A;&#x5E38;&#x5C07;&#x4F86;&#x81EA;&#x4E0D;&#x8855;&#x7D44;&#x7E54;&#x7684;&#x5305;&#x7368;&#x81EA;&#x5206;&#x7D44;. &#x5C0E;&#x5165;&#x9806;&#x5E8F;&#x7121;&#x95DC;&#x7DCA;&#x8981;, &#x4F46;&#x662F;&#x4E00;&#x822C;&#x6703;&#x6839;&#x64DA;&#x5B57;&#x7B26;&#x4E32;&#x9806;&#x5E8F;&#x6392;&#x5217;. (gofmt&#x548C;goimports&#x7684;&#x90FD;&#x53EF;&#x4EE5;&#x5C07;&#x4E0D;&#x8855;&#x5206;&#x7D44;&#x7684;&#x5305;&#x7368;&#x7ACB;&#x6392;&#x5E8F;.)</p>
<p>&#x5C0E;&#x5165;&#x7684;&#x5305;&#x4E4B;&#x9593;&#x53EF;&#x4EE5;&#x901A;&#x904E;&#x6DFB;&#x52A0;&#x7A7A;&#x884C;&#x4F86;&#x5206;&#x7D44;; &#x901A;&#x5E38;&#x5C07;&#x4F86;&#x81EA;&#x4E0D;&#x540C;&#x7D44;&#x7E54;&#x7684;&#x5305;&#x7368;&#x81EA;&#x5206;&#x7D44;. &#x5C0E;&#x5165;&#x9806;&#x5E8F;&#x7121;&#x95DC;&#x7DCA;&#x8981;, &#x4F46;&#x662F;&#x4E00;&#x822C;&#x6703;&#x6839;&#x64DA;&#x5B57;&#x7B26;&#x4E32;&#x9806;&#x5E8F;&#x6392;&#x5217;. (gofmt&#x548C;goimports&#x7684;&#x90FD;&#x53EF;&#x4EE5;&#x5C07;&#x4E0D;&#x540C;&#x5206;&#x7D44;&#x7684;&#x5305;&#x7368;&#x7ACB;&#x6392;&#x5E8F;.)</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> (
<span class="hljs-string">&quot;fmt&quot;</span>
<span class="hljs-string">&quot;html/template&quot;</span>
@@ -2079,14 +2043,14 @@
<span class="hljs-string">&quot;golang.org/x/net/ipv4&quot;</span>
)
</code></pre>
<p>&#x5982;&#x679C;&#x6211;&#x5011;&#x60F3;&#x8855;&#x6642;&#x5C0E;&#x5165;&#x5169;&#x500B;&#x540D;&#x5B57;&#x76F8;&#x8855;&#x7684;&#x5305;, &#x4F8B;&#x5982; math/rand &#x548C; crypto/rand, &#x5C0E;&#x5165;&#x8072;&#x660E;&#x5FC5;&#x9B1A;&#x81F3;&#x5C11;&#x70BA;&#x4E00;&#x500B;&#x8855;&#x540D;&#x5305;&#x6307;&#x5B9A;&#x4E00;&#x500B;&#x65B0;&#x7684;&#x5305;&#x540D;, &#x4EE5;&#x907F;&#x514D;&#x885D;&#x7A81;. &#x9019;&#x53EB;&#x505A;&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;.</p>
<p>&#x5982;&#x679C;&#x6211;&#x5011;&#x60F3;&#x540C;&#x6642;&#x5C0E;&#x5165;&#x5169;&#x500B;&#x540D;&#x5B57;&#x76F8;&#x540C;&#x7684;&#x5305;, &#x4F8B;&#x5982; math/rand &#x548C; crypto/rand, &#x5C0E;&#x5165;&#x8072;&#x660E;&#x5FC5;&#x9B1A;&#x81F3;&#x5C11;&#x7232;&#x4E00;&#x500B;&#x540C;&#x540D;&#x5305;&#x6307;&#x5B9A;&#x4E00;&#x500B;&#x65B0;&#x7684;&#x5305;&#x540D;, &#x4EE5;&#x907F;&#x514D;&#x885D;&#x7A81;. &#x9019;&#x53EB;&#x505A;&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> (
<span class="hljs-string">&quot;crypto/rand&quot;</span>
mrand <span class="hljs-string">&quot;math/rand&quot;</span> <span class="hljs-comment">// alternative name mrand avoids conflict</span>
)
</code></pre>
<p>&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;&#x96BB;&#x5F71;&#x97FF;&#x7576;&#x524D;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;. &#x5176;&#x4ED6;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;&#x5982;&#x679C;&#x5C0E;&#x5165;&#x4E86;&#x76F8;&#x8855;&#x7684;&#x5305;, &#x53EF;&#x4EE5;&#x7528;&#x5C0E;&#x5165;&#x5305;&#x539F;&#x672C;&#x7684;&#x540D;&#x5B57;&#x6216;&#x91CD;&#x547D;&#x540D;&#x70BA;&#x53E6;&#x4E00;&#x500B;&#x5B8C;&#x5168;&#x4E0D;&#x8855;&#x7684;&#x540D;&#x5B57;.</p>
<p>&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;&#x662F;&#x4E00;&#x500B;&#x6709;&#x7528;&#x7684;&#x7279;&#x6027;, &#x4E0D;&#x50C5;&#x50C5;&#x662F;&#x70BA;&#x4E86;&#x89E3;&#x6C7A;&#x540D;&#x5B57;&#x885D;&#x7A81;. &#x5982;&#x679C;&#x5C0E;&#x5165;&#x7684;&#x4E00;&#x500B;&#x5305;&#x540D;&#x5F88;&#x7B28;&#x91CD;, &#x7279;&#x5F46;&#x662F;&#x5728;&#x4E00;&#x4E9B;&#x81EA;&#x52D5;&#x751F;&#x6210;&#x7684;&#x4EE3;&#x78BC;&#x4E2D;, &#x9019;&#x6642;&#x5019;&#x7528;&#x4E00;&#x500B;&#x7C21;&#x77ED;&#x540D;&#x7A31;&#x6703;&#x66F4;&#x65B9;&#x4FBF;. &#x9078;&#x64C7;&#x7528;&#x7C21;&#x77ED;&#x540D;&#x7A31;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x5305;&#x6642;&#x5019;&#x6700;&#x597D;&#x7D71;&#x4E00;, &#x6BD4;&#x907F;&#x514D;&#x5305;&#x540D;&#x6DF7;&#x4E82;. &#x9078;&#x64C7;&#x53E6;&#x4E00;&#x500B;&#x5305;&#x540D;&#x7A31;&#x9084;&#x53EF;&#x4EE5;&#x5E6B;&#x52A9;&#x907F;&#x514D;&#x548C;&#x672C;&#x5730;&#x666E;&#x901A;&#x8B8A;&#x91CF;&#x540D;&#x7522;&#x751F;&#x885D;&#x7A81;. &#x4F8B;&#x5982;, &#x5982;&#x679C;&#x6587;&#x4EF6;&#x4E2D;&#x5DF2;&#x7D93;&#x6709;&#x4E86;&#x4E00;&#x500B;&#x540D;&#x70BA; path &#x7684;&#x8B8A;&#x91CF;, &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x5C07;&quot;path&quot;&#x6A19;&#x6E96;&#x5305;&#x91CD;&#x547D;&#x540D;&#x70BA;pathpkg.</p>
<p>&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;&#x96BB;&#x5F71;&#x97FF;&#x7576;&#x524D;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;. &#x5176;&#x4ED6;&#x7684;Go&#x6E90;&#x6587;&#x4EF6;&#x5982;&#x679C;&#x5C0E;&#x5165;&#x4E86;&#x76F8;&#x540C;&#x7684;&#x5305;, &#x53EF;&#x4EE5;&#x7528;&#x5C0E;&#x5165;&#x5305;&#x539F;&#x672C;&#x7684;&#x540D;&#x5B57;&#x6216;&#x91CD;&#x547D;&#x540D;&#x7232;&#x53E6;&#x4E00;&#x500B;&#x5B8C;&#x5168;&#x4E0D;&#x540C;&#x7684;&#x540D;&#x5B57;.</p>
<p>&#x5C0E;&#x5165;&#x5305;&#x91CD;&#x547D;&#x540D;&#x662F;&#x4E00;&#x500B;&#x6709;&#x7528;&#x7684;&#x7279;&#x6027;, &#x4E0D;&#x50C5;&#x50C5;&#x662F;&#x7232;&#x4E86;&#x89E3;&#x6C7A;&#x540D;&#x5B57;&#x885D;&#x7A81;. &#x5982;&#x679C;&#x5C0E;&#x5165;&#x7684;&#x4E00;&#x500B;&#x5305;&#x540D;&#x5F88;&#x7B28;&#x91CD;, &#x7279;&#x522B;&#x662F;&#x5728;&#x4E00;&#x4E9B;&#x81EA;&#x52D5;&#x751F;&#x6210;&#x7684;&#x4EE3;&#x78BC;&#x4E2D;, &#x9019;&#x6642;&#x5019;&#x7528;&#x4E00;&#x500B;&#x7C21;&#x77ED;&#x540D;&#x7A31;&#x6703;&#x66F4;&#x65B9;&#x4FBF;. &#x9078;&#x64C7;&#x7528;&#x7C21;&#x77ED;&#x540D;&#x7A31;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x5305;&#x6642;&#x5019;&#x6700;&#x597D;&#x7D71;&#x4E00;, &#x6BD4;&#x907F;&#x514D;&#x5305;&#x540D;&#x6DF7;&#x4E82;. &#x9078;&#x64C7;&#x53E6;&#x4E00;&#x500B;&#x5305;&#x540D;&#x7A31;&#x9084;&#x53EF;&#x4EE5;&#x5E6B;&#x52A9;&#x907F;&#x514D;&#x548C;&#x672C;&#x5730;&#x666E;&#x901A;&#x8B8A;&#x91CF;&#x540D;&#x7523;&#x751F;&#x885D;&#x7A81;. &#x4F8B;&#x5982;, &#x5982;&#x679C;&#x6587;&#x4EF6;&#x4E2D;&#x5DF2;&#x7D93;&#x6709;&#x4E86;&#x4E00;&#x500B;&#x540D;&#x7232; path &#x7684;&#x8B8A;&#x91CF;, &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x5C07;&quot;path&quot;&#x6A19;&#x6E96;&#x5305;&#x91CD;&#x547D;&#x540D;&#x7232;pathpkg.</p>
<p>&#x6BCF;&#x500B;&#x5C0E;&#x5165;&#x8072;&#x660E;&#x660E;&#x78BA;&#x6307;&#x5B9A;&#x4E86;&#x7576;&#x524D;&#x5305;&#x548C;&#x5C0E;&#x5165;&#x5305;&#x4E4B;&#x9593;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;. &#x5982;&#x679C;&#x9047;&#x5230;&#x5305;&#x5FAA;&#x74B0;&#x5C0E;&#x5165;&#x7684;&#x60C5;&#x6CC1;, Go&#x7684;&#x69CB;&#x5EFA;&#x5DE5;&#x5177;&#x5C07;&#x5831;&#x544A;&#x932F;&#x8AA4;.</p>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.5" data-chapter-title="匿名導入" data-filepath="ch10/ch10-05.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.5" data-chapter-title="匿名導入" data-filepath="ch10/ch10-05.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,11 +2024,11 @@
<section class="normal" id="section-">
<h2 id="105-&#x533F;&#x540D;&#x5C0E;&#x5165;">10.5. &#x533F;&#x540D;&#x5C0E;&#x5165;</h2>
<p>&#x5982;&#x679C;&#x96BB;&#x662F;&#x5C0E;&#x5165;&#x4E00;&#x500B;&#x5305;&#x800C;&#x4F75;&#x4E0D;&#x4F7F;&#x7528;&#x5C0E;&#x5165;&#x7684;&#x5305;&#x662F;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x932F;&#x8AA4;. &#x4F46;&#x662F;&#x6709;&#x6642;&#x5019;&#x6211;&#x5011;&#x96BB;&#x662F;&#x60F3;&#x5229;&#x7528;&#x5C0E;&#x5165;&#x5305;&#x7522;&#x751F;&#x7684;&#x526F;&#x4F5C;&#x7528;: &#x5B83;&#x6703;&#x8A08;&#x7B97;&#x5305;&#x7D1A;&#x8B8A;&#x91CF;&#x7684;&#x521D;&#x59CB;&#x5316;&#x9336;&#x9054;&#x5F0F;&#x548C;&#x57F7;&#x884C;&#x5C0E;&#x5165;&#x5305;&#x7684; init &#x521D;&#x59CB;&#x5316;&#x51FD;&#x6578; (&#xA7;2.6.2). &#x9019;&#x6642;&#x5019;&#x6211;&#x5011;&#x9700;&#x8981;&#x6291;&#x88FD;&#x201C;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x5C0E;&#x5165;&#x201D;&#x932F;&#x8AA4;&#x662F;&#x95A4;&#x7406;&#x7684;, &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x4E0B;&#x5283;&#x7DAB; <code>_</code> &#x4F86;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x7684;&#x5305;. &#x50CF;&#x5F80;&#x5E38;&#x4E00;&#x6A23;, &#x4E0B;&#x5283;&#x7DAB; <code>_</code> &#x70BA;&#x7A7A;&#x767D;&#x6A19;&#x8B58;&#x7B26;, &#x4F75;&#x4E0D;&#x80FD;&#x88AB;&#x8A2A;&#x554F;.</p>
<p>&#x5982;&#x679C;&#x96BB;&#x662F;&#x5C0E;&#x5165;&#x4E00;&#x500B;&#x5305;&#x800C;&#x4F75;&#x4E0D;&#x4F7F;&#x7528;&#x5C0E;&#x5165;&#x7684;&#x5305;&#x662F;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x932F;&#x8AA4;. &#x4F46;&#x662F;&#x6709;&#x6642;&#x5019;&#x6211;&#x5011;&#x96BB;&#x662F;&#x60F3;&#x5229;&#x7528;&#x5C0E;&#x5165;&#x5305;&#x7523;&#x751F;&#x7684;&#x526F;&#x4F5C;&#x7528;: &#x5B83;&#x6703;&#x8A08;&#x7B97;&#x5305;&#x7D1A;&#x8B8A;&#x91CF;&#x7684;&#x521D;&#x59CB;&#x5316;&#x8868;&#x9054;&#x5F0F;&#x548C;&#x57F7;&#x884C;&#x5C0E;&#x5165;&#x5305;&#x7684; init &#x521D;&#x59CB;&#x5316;&#x51FD;&#x6578; (&#xA7;2.6.2). &#x9019;&#x6642;&#x5019;&#x6211;&#x5011;&#x9700;&#x8981;&#x6291;&#x88FD;&#x201C;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x5C0E;&#x5165;&#x201D;&#x932F;&#x8AA4;&#x662F;&#x5408;&#x7406;&#x7684;, &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x4E0B;&#x5283;&#x7DDA; <code>_</code> &#x4F86;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x7684;&#x5305;. &#x50CF;&#x5F80;&#x5E38;&#x4E00;&#x6A23;, &#x4E0B;&#x5283;&#x7DDA; <code>_</code> &#x7232;&#x7A7A;&#x767D;&#x6A19;&#x8B58;&#x7B26;, &#x4F75;&#x4E0D;&#x80FD;&#x88AB;&#x8A2A;&#x554F;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> _ <span class="hljs-string">&quot;image/png&quot;</span> <span class="hljs-comment">// register PNG decoder</span>
</code></pre>
<p>&#x9019;&#x500B;&#x88AB;&#x7A31;&#x70BA;&#x533F;&#x540D;&#x5C0E;&#x5165;. &#x5B83;&#x901A;&#x5E38;&#x662F;&#x7528;&#x4F86;&#x5BE6;&#x73FE;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x6642;&#x6A5F;&#x88FD;, &#x7136;&#x5F8C;&#x901A;&#x904E;&#x5728;main&#x4E3B;&#x7A0B;&#x5E8F;&#x5165;&#x53E3;&#x9078;&#x64C7;&#x6027;&#x5730;&#x5C0E;&#x5165;&#x9644;&#x52A0;&#x7684;&#x5305;. &#x9996;&#x5148;, &#x8B93;&#x6211;&#x5011;&#x770B;&#x770B;&#x5982;&#x4F55;&#x4F7F;&#x7528;&#x5B83;, &#x7136;&#x5F8C;&#x518D;&#x770B;&#x770B;&#x5B83;&#x662F;&#x5982;&#x4F55;&#x5DE5;&#x4F5C;&#x7684;:</p>
<p>&#x6A19;&#x6E96;&#x5EAB;&#x7684; image &#x5716;&#x50CF;&#x5305;&#x5C0E;&#x5165;&#x4E86;&#x4E00;&#x500B; <code>Decode</code> &#x51FD;&#x6578;, &#x7528;&#x65BC;&#x5F9E; <code>io.Reader</code> &#x63A5;&#x53E3;&#x8B80;&#x53D6;&#x6578;&#x64DA;&#x4F75;&#x89E3;&#x78BC;&#x5716;&#x50CF;, &#x5B83;&#x8ABF;&#x7528;&#x5E95;&#x5C64;&#x8A3B;&#x518A;&#x7684;&#x5716;&#x50CF;&#x89E3;&#x78BC;&#x5668;&#x5DE5;&#x4F5C;, &#x7136;&#x5F8C;&#x8FD4;&#x8FF4; image.Image &#x985E;&#x578B;&#x7684;&#x5716;&#x50CF;. &#x4F7F;&#x7528; <code>image.Decode</code> &#x5F88;&#x5BB9;&#x6613;&#x7DE8;&#x5BEB;&#x4E00;&#x500B;&#x5716;&#x50CF;&#x683C;&#x5F0F;&#x7684;&#x8F49;&#x63DB;&#x5DE5;&#x5177;, &#x8B80;&#x53D6;&#x4E00;&#x7A2E;&#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;, &#x7136;&#x5F8C;&#x7DE8;&#x78BC;&#x70BA;&#x53E6;&#x4E00;&#x7A2E;&#x5716;&#x50CF;&#x683C;&#x5F0F;:</p>
<p>&#x9019;&#x500B;&#x88AB;&#x7A31;&#x7232;&#x533F;&#x540D;&#x5C0E;&#x5165;. &#x5B83;&#x901A;&#x5E38;&#x662F;&#x7528;&#x4F86;&#x5BE6;&#x73FE;&#x4E00;&#x500B;&#x7DE8;&#x8B6F;&#x6642;&#x6A5F;&#x88FD;, &#x7136;&#x5F8C;&#x901A;&#x904E;&#x5728;main&#x4E3B;&#x7A0B;&#x5E8F;&#x5165;&#x53E3;&#x9078;&#x64C7;&#x6027;&#x5730;&#x5C0E;&#x5165;&#x9644;&#x52A0;&#x7684;&#x5305;. &#x9996;&#x5148;, &#x8B93;&#x6211;&#x5011;&#x770B;&#x770B;&#x5982;&#x4F55;&#x4F7F;&#x7528;&#x5B83;, &#x7136;&#x5F8C;&#x518D;&#x770B;&#x770B;&#x5B83;&#x662F;&#x5982;&#x4F55;&#x5DE5;&#x4F5C;&#x7684;:</p>
<p>&#x6A19;&#x6E96;&#x5EAB;&#x7684; image &#x5716;&#x50CF;&#x5305;&#x5C0E;&#x5165;&#x4E86;&#x4E00;&#x500B; <code>Decode</code> &#x51FD;&#x6578;, &#x7528;&#x65BC;&#x5F9E; <code>io.Reader</code> &#x63A5;&#x53E3;&#x8B80;&#x53D6;&#x6578;&#x64DA;&#x4F75;&#x89E3;&#x78BC;&#x5716;&#x50CF;, &#x5B83;&#x8ABF;&#x7528;&#x5E95;&#x5C64;&#x8A3B;&#x518A;&#x7684;&#x5716;&#x50CF;&#x89E3;&#x78BC;&#x5668;&#x5DE5;&#x4F5C;, &#x7136;&#x5F8C;&#x8FD4;&#x8FF4; image.Image &#x985E;&#x578B;&#x7684;&#x5716;&#x50CF;. &#x4F7F;&#x7528; <code>image.Decode</code> &#x5F88;&#x5BB9;&#x6613;&#x7DE8;&#x5BEB;&#x4E00;&#x500B;&#x5716;&#x50CF;&#x683C;&#x5F0F;&#x7684;&#x8F49;&#x63DB;&#x5DE5;&#x5177;, &#x8B80;&#x53D6;&#x4E00;&#x7A2E;&#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;, &#x7136;&#x5F8C;&#x7DE8;&#x78BC;&#x7232;&#x53E6;&#x4E00;&#x7A2E;&#x5716;&#x50CF;&#x683C;&#x5F0F;:</p>
<pre><code class="lang-Go">gopl.io/ch10/jpeg
<span class="hljs-comment">// The jpeg command reads a PNG image from the standard input</span>
<span class="hljs-comment">// and writes it as a JPEG image to the standard output.</span>
@@ -2095,16 +2059,16 @@
<span class="hljs-keyword">return</span> jpeg.Encode(out, img, &amp;jpeg.Options{Quality: <span class="hljs-number">95</span>})
}
</code></pre>
<p>&#x5982;&#x679C;&#x6211;&#x5011;&#x5C07; <code>gopl.io/ch3/mandelbrot</code> (&#xA7;3.3) &#x7684;&#x8F38;&#x9F63;&#x5C0E;&#x5165;&#x5230;&#x9019;&#x500B;&#x5DE5;&#x5177;&#x7684;&#x8F38;&#x5165;, &#x5B83;&#x5C07;&#x89E3;&#x78BC;&#x8F38;&#x5165;&#x7684;PNG&#x683C;&#x5F0F;&#x5716;&#x50CF;, &#x7136;&#x5F8C;&#x8F49;&#x63DB;&#x70BA;JPEG&#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;(&#x5716;3.3).</p>
<p>&#x5982;&#x679C;&#x6211;&#x5011;&#x5C07; <code>gopl.io/ch3/mandelbrot</code> (&#xA7;3.3) &#x7684;&#x8F38;&#x9F63;&#x5C0E;&#x5165;&#x5230;&#x9019;&#x500B;&#x5DE5;&#x5177;&#x7684;&#x8F38;&#x5165;, &#x5B83;&#x5C07;&#x89E3;&#x78BC;&#x8F38;&#x5165;&#x7684;PNG&#x683C;&#x5F0F;&#x5716;&#x50CF;, &#x7136;&#x5F8C;&#x8F49;&#x63DB;&#x7232;JPEG&#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;(&#x5716;3.3).</p>
<pre><code>$ go build gopl.io/ch3/mandelbrot
$ go build gopl.io/ch10/jpeg
$ ./mandelbrot | ./jpeg &gt;mandelbrot.jpg
Input format = png
</code></pre><p>&#x8981;&#x8A3B;&#x610F; image/png &#x5305;&#x7684;&#x533F;&#x540D;&#x5C0E;&#x5165;&#x8A9E;&#x53E5;. &#x5982;&#x679C;&#x6C92;&#x6709;&#x9019;&#x4E00;&#x884C;&#x8A9E;&#x53E5;, &#x4F9D;&#x7136;&#x53EF;&#x4EE5;&#x7DE8;&#x8B6F;&#x548C;&#x904B;&#x884C;, &#x4F46;&#x662F;&#x5B83;&#x5C07;&#x4E0D;&#x80FD;&#x8B58;&#x5F46; PNG &#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;:</p>
</code></pre><p>&#x8981;&#x8A3B;&#x610F; image/png &#x5305;&#x7684;&#x533F;&#x540D;&#x5C0E;&#x5165;&#x8A9E;&#x53E5;. &#x5982;&#x679C;&#x6C92;&#x6709;&#x9019;&#x4E00;&#x884C;&#x8A9E;&#x53E5;, &#x4F9D;&#x7136;&#x53EF;&#x4EE5;&#x7DE8;&#x8B6F;&#x548C;&#x904B;&#x884C;, &#x4F46;&#x662F;&#x5B83;&#x5C07;&#x4E0D;&#x80FD;&#x8B58;&#x522B; PNG &#x683C;&#x5F0F;&#x7684;&#x5716;&#x50CF;:</p>
<pre><code>$ go build gopl.io/ch10/jpeg
$ ./mandelbrot | ./jpeg &gt;mandelbrot.jpg
jpeg: image: unknown format
</code></pre><p>&#x4E0B;&#x9EAB;&#x7684;&#x4EE3;&#x78BC;&#x6F14;&#x793A;&#x4E86;&#x5B83;&#x7684;&#x5DE5;&#x4F5C;&#x6A5F;&#x88FD;. &#x6A19;&#x6E96;&#x5EAB;&#x63D0;&#x4F9B;&#x4E86;GIF, PNG, &#x548C; JPEG &#x683C;&#x5F0F;&#x5716;&#x50CF;&#x7684;&#x89E3;&#x78BC;&#x5668;, &#x7528;&#x6236;&#x4E5F;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x81EA;&#x5DF1;&#x7684;&#x89E3;&#x78BC;&#x5668;, &#x4F46;&#x662F;&#x70BA;&#x4E86;&#x4FDD;&#x5B58;&#x7A0B;&#x5E8F;&#x9AD4;&#x7A4D;&#x8F03;&#x5C0F;, &#x5F88;&#x591A;&#x89E3;&#x78BC;&#x5668;&#x4F75;&#x6C92;&#x6709;&#x88AB;&#x5305;&#x542B;&#x76E1;&#x91CF;, &#x9664;&#x975E;&#x662F;&#x660E;&#x78BA;&#x9700;&#x8981;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;. image.Decode &#x51FD;&#x6578;&#x6703;&#x67FB;&#x8A62;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;&#x5217;&#x9336;. &#x5217;&#x9336;&#x7684;&#x6BCF;&#x500B;&#x5165;&#x53E3;&#x6307;&#x5B9A;&#x4E86;&#x56DB;&#x4EF6;&#x4E8B;&#x60C5;: &#x683C;&#x5F0F;&#x7684;&#x540D;&#x7A31;; &#x4E00;&#x500B;&#x7528;&#x65BC;&#x63CF;&#x8FF0;&#x9019;&#x7A2E;&#x5716;&#x50CF;&#x6578;&#x64DA;&#x958B;&#x982D;&#x90E8;&#x5206;&#x6A21;&#x5F0F;&#x7684;&#x5B57;&#x7B26;&#x4E32;, &#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5668;&#x6AA2;&#x6E2C;&#x8B58;&#x5F46;; &#x4E00;&#x500B; Decode &#x51FD;&#x6578; &#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5716;&#x50CF;; &#x4E00;&#x500B; DecodeConfig &#x51FD;&#x6578;&#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5716;&#x50CF;&#x7684;&#x5927;&#x5C0F;&#x548C;&#x9854;&#x8272;&#x7A7A;&#x9593;&#x7684;&#x4FE1;&#x606F;. &#x6BCF;&#x500B;&#x5165;&#x53E3;&#x662F;&#x901A;&#x904E;&#x8ABF;&#x7528; image.RegisterFormat &#x51FD;&#x6578;&#x8A3B;&#x518A;, &#x4E00;&#x822C;&#x662F;&#x5728;&#x6BCF;&#x500B;&#x683C;&#x5F0F;&#x5305;&#x7684;&#x521D;&#x59CB;&#x5316;&#x51FD;&#x6578;&#x4E2D;&#x8ABF;&#x7528;, &#x4F8B;&#x5982; image/png &#x5305;&#x662F;&#x9019;&#x6A23;&#x7684;:</p>
</code></pre><p>&#x4E0B;&#x9762;&#x7684;&#x4EE3;&#x78BC;&#x6F14;&#x793A;&#x4E86;&#x5B83;&#x7684;&#x5DE5;&#x4F5C;&#x6A5F;&#x88FD;. &#x6A19;&#x6E96;&#x5EAB;&#x63D0;&#x4F9B;&#x4E86;GIF, PNG, &#x548C; JPEG &#x683C;&#x5F0F;&#x5716;&#x50CF;&#x7684;&#x89E3;&#x78BC;&#x5668;, &#x7528;&#x6236;&#x4E5F;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x81EA;&#x5DF1;&#x7684;&#x89E3;&#x78BC;&#x5668;, &#x4F46;&#x662F;&#x7232;&#x4E86;&#x4FDD;&#x5B58;&#x7A0B;&#x5E8F;&#x9AD4;&#x7A4D;&#x8F03;&#x5C0F;, &#x5F88;&#x591A;&#x89E3;&#x78BC;&#x5668;&#x4F75;&#x6C92;&#x6709;&#x88AB;&#x5305;&#x542B;&#x76E1;&#x91CF;, &#x9664;&#x975E;&#x662F;&#x660E;&#x78BA;&#x9700;&#x8981;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;. image.Decode &#x51FD;&#x6578;&#x6703;&#x67FB;&#x8A62;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;&#x5217;&#x8868;. &#x5217;&#x8868;&#x7684;&#x6BCF;&#x500B;&#x5165;&#x53E3;&#x6307;&#x5B9A;&#x4E86;&#x56DB;&#x4EF6;&#x4E8B;&#x60C5;: &#x683C;&#x5F0F;&#x7684;&#x540D;&#x7A31;; &#x4E00;&#x500B;&#x7528;&#x65BC;&#x63CF;&#x8FF0;&#x9019;&#x7A2E;&#x5716;&#x50CF;&#x6578;&#x64DA;&#x958B;&#x982D;&#x90E8;&#x5206;&#x6A21;&#x5F0F;&#x7684;&#x5B57;&#x7B26;&#x4E32;, &#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5668;&#x6AA2;&#x6E2C;&#x8B58;&#x522B;; &#x4E00;&#x500B; Decode &#x51FD;&#x6578; &#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5716;&#x50CF;; &#x4E00;&#x500B; DecodeConfig &#x51FD;&#x6578;&#x7528;&#x65BC;&#x89E3;&#x78BC;&#x5716;&#x50CF;&#x7684;&#x5927;&#x5C0F;&#x548C;&#x9854;&#x8272;&#x7A7A;&#x9593;&#x7684;&#x4FE1;&#x606F;. &#x6BCF;&#x500B;&#x5165;&#x53E3;&#x662F;&#x901A;&#x904E;&#x8ABF;&#x7528; image.RegisterFormat &#x51FD;&#x6578;&#x8A3B;&#x518A;, &#x4E00;&#x822C;&#x662F;&#x5728;&#x6BCF;&#x500B;&#x683C;&#x5F0F;&#x5305;&#x7684;&#x521D;&#x59CB;&#x5316;&#x51FD;&#x6578;&#x4E2D;&#x8ABF;&#x7528;, &#x4F8B;&#x5982; image/png &#x5305;&#x662F;&#x9019;&#x6A23;&#x7684;:</p>
<pre><code class="lang-Go"><span class="hljs-keyword">package</span> png <span class="hljs-comment">// image/png</span>
<span class="hljs-keyword">func</span> Decode(r io.Reader) (image.Image, error)
@@ -2116,7 +2080,7 @@ jpeg: image: unknown format
}
</code></pre>
<p>&#x6700;&#x7D42;&#x7684;&#x6548;&#x679C;&#x662F;, &#x4E3B;&#x7A0B;&#x5E8F;&#x503C;&#x9700;&#x8981;&#x533F;&#x540D;&#x5C0E;&#x5165;&#x9700;&#x8981; image.Decode &#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;&#x5C0D;&#x61C9;&#x89E3;&#x78BC;&#x5305;&#x5C31;&#x53EF;&#x4EE5;&#x89E3;&#x78BC;&#x5716;&#x50CF;&#x4E86;.</p>
<p>&#x6578;&#x64DA;&#x5EAB;&#x5305; database/sql &#x4E5F;&#x662F;&#x63A1;&#x7528;&#x4E86;&#x985E;&#x4F3C;&#x7684;&#x6280;&#x672E;, &#x8B93;&#x7528;&#x6236;&#x53EF;&#x4EE5;&#x6839;&#x64DA;&#x81EA;&#x5DF1;&#x9700;&#x8981;&#x9078;&#x64C7;&#x5C0E;&#x5165;&#x5FC5;&#x8981;&#x7684;&#x6578;&#x64DA;&#x5EAB;&#x9A45;&#x52D5;. &#x4F8B;&#x5982;:</p>
<p>&#x6578;&#x64DA;&#x5EAB;&#x5305; database/sql &#x4E5F;&#x662F;&#x91C7;&#x7528;&#x4E86;&#x985E;&#x4F3C;&#x7684;&#x6280;&#x8853;, &#x8B93;&#x7528;&#x6236;&#x53EF;&#x4EE5;&#x6839;&#x64DA;&#x81EA;&#x5DF1;&#x9700;&#x8981;&#x9078;&#x64C7;&#x5C0E;&#x5165;&#x5FC5;&#x8981;&#x7684;&#x6578;&#x64DA;&#x5EAB;&#x9A45;&#x52D5;. &#x4F8B;&#x5982;:</p>
<pre><code class="lang-Go"><span class="hljs-keyword">import</span> (
<span class="hljs-string">&quot;database/mysql&quot;</span>
_ <span class="hljs-string">&quot;github.com/lib/pq&quot;</span> <span class="hljs-comment">// enable support for Postgres</span>
@@ -2127,8 +2091,8 @@ db, err = sql.Open(<span class="hljs-string">&quot;postgres&quot;</span>, dbname
db, err = sql.Open(<span class="hljs-string">&quot;mysql&quot;</span>, dbname) <span class="hljs-comment">// OK</span>
db, err = sql.Open(<span class="hljs-string">&quot;sqlite3&quot;</span>, dbname) <span class="hljs-comment">// returns error: unknown driver &quot;sqlite3&quot;</span>
</code></pre>
<p><strong>&#x7DF4;&#x7FD2; 10.1:</strong> &#x64F4;&#x5C55; jpeg &#x7A0B;&#x5E8F;, &#x652F;&#x6301;&#x4EFB;&#x610F;&#x5716;&#x50CF;&#x683C;&#x5F0F;&#x4E4B;&#x9593;&#x7684;&#x76F8;&#x4E92;&#x8F49;&#x63DB;, &#x4F7F;&#x7528; image.Decode &#x6AA2;&#x6E2C;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;&#x985E;&#x578B;, &#x7136;&#x5F8C;&#x8855;&#x6B65; flag &#x547D;&#x4EE4;&#x884C;&#x6A19;&#x8A8C;&#x53C3;&#x6578;&#x9078;&#x64C7;&#x8F38;&#x9F63;&#x7684;&#x683C;&#x5F0F;.</p>
<p><strong>&#x7DF4;&#x7FD2; 10.2:</strong> &#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x901A;&#x7528;&#x7684;&#x58D3;&#x7E2E;&#x6587;&#x4EF6;&#x8B80;&#x53D6;&#x6846;&#x67B6;, &#x7528;&#x4F86;&#x8B80;&#x53D6; ZIP(archive/zip) &#x548C; POSIX tar(archive/tar) &#x683C;&#x5F0F;&#x58D3;&#x7E2E;&#x7684;&#x6587;&#x6A94;. &#x4F7F;&#x7528;&#x985E;&#x4F3C;&#x4E0A;&#x9EAB;&#x7684;&#x8A3B;&#x518A;&#x6A5F;&#x88FD;&#x4F86;&#x64F4;&#x5C55;&#x652F;&#x6301;&#x4E0D;&#x8855;&#x7684;&#x58D3;&#x7E2E;&#x683C;&#x5F0F;, &#x7136;&#x5F8C;&#x6839;&#x64DA;&#x9700;&#x8981;&#x901A;&#x904E;&#x533F;&#x540D;&#x5C0E;&#x5165;&#x9078;&#x64C7;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;.</p>
<p><strong>&#x7DF4;&#x7FD2; 10.1:</strong> &#x64F4;&#x5C55; jpeg &#x7A0B;&#x5E8F;, &#x652F;&#x6301;&#x4EFB;&#x610F;&#x5716;&#x50CF;&#x683C;&#x5F0F;&#x4E4B;&#x9593;&#x7684;&#x76F8;&#x4E92;&#x8F49;&#x63DB;, &#x4F7F;&#x7528; image.Decode &#x6AA2;&#x6E2C;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;&#x985E;&#x578B;, &#x7136;&#x5F8C;&#x540C;&#x6B65; flag &#x547D;&#x4EE4;&#x884C;&#x6A19;&#x8A8C;&#x53C3;&#x6578;&#x9078;&#x64C7;&#x8F38;&#x9F63;&#x7684;&#x683C;&#x5F0F;.</p>
<p><strong>&#x7DF4;&#x7FD2; 10.2:</strong> &#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x901A;&#x7528;&#x7684;&#x58D3;&#x7E2E;&#x6587;&#x4EF6;&#x8B80;&#x53D6;&#x6846;&#x67B6;, &#x7528;&#x4F86;&#x8B80;&#x53D6; ZIP(archive/zip) &#x548C; POSIX tar(archive/tar) &#x683C;&#x5F0F;&#x58D3;&#x7E2E;&#x7684;&#x6587;&#x6A94;. &#x4F7F;&#x7528;&#x985E;&#x4F3C;&#x4E0A;&#x9762;&#x7684;&#x8A3B;&#x518A;&#x6A5F;&#x88FD;&#x4F86;&#x64F4;&#x5C55;&#x652F;&#x6301;&#x4E0D;&#x540C;&#x7684;&#x58D3;&#x7E2E;&#x683C;&#x5F0F;, &#x7136;&#x5F8C;&#x6839;&#x64DA;&#x9700;&#x8981;&#x901A;&#x904E;&#x533F;&#x540D;&#x5C0E;&#x5165;&#x9078;&#x64C7;&#x652F;&#x6301;&#x7684;&#x683C;&#x5F0F;.</p>
</section>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.6" data-chapter-title="包和命名" data-filepath="ch10/ch10-06.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.6" data-chapter-title="包和命名" data-filepath="ch10/ch10-06.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>
@@ -2061,13 +2025,13 @@
<h2 id="106-&#x5305;&#x548C;&#x547D;&#x540D;">10.6. &#x5305;&#x548C;&#x547D;&#x540D;</h2>
<p>&#x5728;&#x672C;&#x7BC0;&#x4E2D;, &#x6211;&#x5011;&#x5C07;&#x63D0;&#x4F9B;&#x4E00;&#x4E9B;&#x95DC;&#x65BC;&#x5982;&#x4F55;&#x9075;&#x5FAA;Go&#x8A9E;&#x8A00;&#x7368;&#x7279;&#x7684;&#x5305;&#x548C;&#x6210;&#x54E1;&#x7684;&#x547D;&#x540D;&#x7D04;&#x5B9A;.</p>
<p>&#x7576;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x5305;, &#x4E00;&#x822C;&#x8981;&#x7528;&#x77ED;&#x5C0F;&#x7684;&#x5305;&#x540D;, &#x4F46;&#x4E5F;&#x4E0D;&#x80FD;&#x592A;&#x77ED;&#x5C0E;&#x7DFB;&#x96E3;&#x4EE5;&#x7406;&#x89E3;.
<p>&#x7576;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x5305;, &#x4E00;&#x822C;&#x8981;&#x7528;&#x77ED;&#x5C0F;&#x7684;&#x5305;&#x540D;, &#x4F46;&#x4E5F;&#x4E0D;&#x80FD;&#x592A;&#x77ED;&#x5C0E;&#x81F4;&#x96E3;&#x4EE5;&#x7406;&#x89E3;.
&#x6A19;&#x6E96;&#x5EAB;&#x4E2D;&#x6700;&#x5E38;&#x7528;&#x7684;&#x5305;&#x6709; bufio, bytes, flag, fmt, http, io, json, os, sort, sync, &#x548C; time &#x7B49;&#x5305;.</p>
<p>&#x5B83;&#x5011;&#x7684;&#x540D;&#x5B57;&#x90FD;&#x7C21;&#x6F54;&#x660E;&#x4E86;. &#x4F8B;&#x5982;, &#x4E0D;&#x8981;&#x5C07;&#x4E00;&#x500B;&#x985E;&#x4F3C; imageutil &#x6216; ioutilis &#x7684;&#x901A;&#x7528;&#x5305;&#x547D;&#x540D;&#x70BA; util,
&#x96D6;&#x7136;&#x5B83;&#x770B;&#x8D77;&#x4F86;&#x5F88;&#x77ED;&#x5C0F;. &#x8981;&#x76E1;&#x91CF;&#x907F;&#x514D;&#x5305;&#x540D;&#x4F7F;&#x7528;&#x7D93;&#x5E38;&#x88AB;&#x7528;&#x65BC;&#x4FB7;&#x90E8;&#x8B8A;&#x91CF;&#x7684;&#x540D;&#x5B57;, &#x9019;&#x6A23;&#x53EF;&#x80FD;&#x5C0E;&#x7DFB;&#x7528;&#x6236;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x5305;, &#x4F8B;&#x5982;&#x524D;&#x9EAB;&#x770B;&#x5230;&#x7684; path &#x5305;.</p>
<p>&#x5305;&#x540D;&#x8855;&#x6642;&#x63A1;&#x7528;&#x55AE;&#x6578;&#x7684;&#x5F62;&#x5F0F;. &#x6A19;&#x6E96;&#x5EAB;&#x7684; bytes, errors, &#x548C; strings &#x4F7F;&#x7528;&#x4E86;&#x5FA9;&#x6578;&#x662F;&#x70BA;&#x4E86;&#x907F;&#x514D;&#x548C;&#x9810;&#x5B9A;&#x7FA9;&#x7684;&#x985E;&#x578B;&#x885D;&#x7A81;, &#x8855;&#x6A23;&#x9084;&#x6709; go/types &#x662F;&#x70BA;&#x4E86;&#x907F;&#x514D;&#x548C;&#x95DC;&#x9375;&#x5B57;&#x885D;&#x7A81;.</p>
<p>&#x8981;&#x907F;&#x514D;&#x5305;&#x540D;&#x6709;&#x5176;&#x4ED6;&#x7684;&#x542B;&#x7FA9;. &#x4F8B;&#x5982;, 2.5&#x7BC0;&#x4E2D;&#x6211;&#x5011;&#x7684;&#x6EAB;&#x5EA6;&#x8F49;&#x63DB;&#x5305;&#x6700;&#x521D;&#x4F7F;&#x7528;&#x4E86; temp &#x5305;&#x540D;, &#x96D6;&#x7136;&#x4F75;&#x6C92;&#x6709;&#x6301;&#x7E8C;&#x591A;&#x4E45;. &#x9019;&#x662F;&#x4E00;&#x500B;&#x7CDF;&#x7CD5;&#x7684;&#x505A;&#x6CD5;, &#x56E0;&#x70BA; <code>temp</code> &#x5E7E;&#x4E4E;&#x662F;&#x81E8;&#x6642;&#x8B8A;&#x91CF;&#x7684;&#x8855;&#x7FA9;&#x8A5E;. &#x7136;&#x5F8C;&#x6211;&#x5011;&#x6709;&#x4E00;&#x6BB5;&#x6642;&#x9593;&#x4F7F;&#x7528;&#x4E86; temperature &#x4F5C;&#x70BA;&#x5305;&#x540D;, &#x96D6;&#x7136;&#x540D;&#x5B57;&#x4F75;&#x6C92;&#x6709;&#x9336;&#x9054;&#x5305;&#x7684;&#x771E;&#x662F;&#x7528;&#x9014;. &#x6700;&#x5F8C;&#x6211;&#x5011;&#x6539;&#x6210;&#x4E86; tempconv &#x5305;&#x540D;, &#x548C; strconv &#x985E;&#x4F3C;&#x4E5F;&#x5F88;&#x7C21;&#x6F54;&#x660E;&#x4E86;.</p>
<p>&#x73FE;&#x5728;&#x8B93;&#x6211;&#x5011;&#x770B;&#x770B;&#x5982;&#x4F55;&#x547D;&#x540D;&#x5305;&#x7684;&#x896F;&#x8863;. &#x7531;&#x65BC;&#x662F;&#x901A;&#x904E;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x540D;&#x5B57;&#x5F15;&#x5165;&#x5305;&#x88CF;&#x9EAB;&#x7684;&#x6210;&#x54E1;, &#x4F8B;&#x5982; fmt.Println, &#x8855;&#x6642;&#x5305;&#x542B;&#x4E86;&#x5305;&#x548C;&#x6210;&#x540D;&#x7684;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;(&#x7FFB;&#x8B6F;&#x969C;&#x7919;). &#x6211;&#x5011;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x95DC;&#x8A3B;Println&#x7684;&#x5177;&#x9AD4;&#x5167;&#x5BB9;, &#x56E0;&#x70BA; fmt &#x5DF2;&#x7D93;&#x5305;&#x542B;&#x4E86;&#x9019;&#x500B;&#x4FE1;&#x606F;. &#x7576;&#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x5305;&#x7684;&#x6642;&#x5019;, &#x9700;&#x8981;&#x8003;&#x616E;&#x5305;&#x540D;&#x548C;&#x6210;&#x54E1;&#x540D;&#x5169;&#x500B;&#x90E8;&#x5206;&#x5982;&#x4F55;&#x914D;&#x95A4;. &#x4E0B;&#x9EAB;&#x6709;&#x4E00;&#x4E9B;&#x4F8B;&#x5B50;:</p>
<p>&#x5B83;&#x5011;&#x7684;&#x540D;&#x5B57;&#x90FD;&#x7C21;&#x6F54;&#x660E;&#x4E86;. &#x4F8B;&#x5982;, &#x4E0D;&#x8981;&#x5C07;&#x4E00;&#x500B;&#x985E;&#x4F3C; imageutil &#x6216; ioutilis &#x7684;&#x901A;&#x7528;&#x5305;&#x547D;&#x540D;&#x7232; util,
&#x96D6;&#x7136;&#x5B83;&#x770B;&#x8D77;&#x4F86;&#x5F88;&#x77ED;&#x5C0F;. &#x8981;&#x76E1;&#x91CF;&#x907F;&#x514D;&#x5305;&#x540D;&#x4F7F;&#x7528;&#x7D93;&#x5E38;&#x88AB;&#x7528;&#x65BC;&#x5C40;&#x90E8;&#x8B8A;&#x91CF;&#x7684;&#x540D;&#x5B57;, &#x9019;&#x6A23;&#x53EF;&#x80FD;&#x5C0E;&#x81F4;&#x7528;&#x6236;&#x91CD;&#x547D;&#x540D;&#x5C0E;&#x5165;&#x5305;, &#x4F8B;&#x5982;&#x524D;&#x9762;&#x770B;&#x5230;&#x7684; path &#x5305;.</p>
<p>&#x5305;&#x540D;&#x540C;&#x6642;&#x91C7;&#x7528;&#x55AE;&#x6578;&#x7684;&#x5F62;&#x5F0F;. &#x6A19;&#x6E96;&#x5EAB;&#x7684; bytes, errors, &#x548C; strings &#x4F7F;&#x7528;&#x4E86;&#x8907;&#x6578;&#x662F;&#x7232;&#x4E86;&#x907F;&#x514D;&#x548C;&#x9810;&#x5B9A;&#x7FA9;&#x7684;&#x985E;&#x578B;&#x885D;&#x7A81;, &#x540C;&#x6A23;&#x9084;&#x6709; go/types &#x662F;&#x7232;&#x4E86;&#x907F;&#x514D;&#x548C;&#x95DC;&#x9375;&#x5B57;&#x885D;&#x7A81;.</p>
<p>&#x8981;&#x907F;&#x514D;&#x5305;&#x540D;&#x6709;&#x5176;&#x4ED6;&#x7684;&#x542B;&#x7FA9;. &#x4F8B;&#x5982;, 2.5&#x7BC0;&#x4E2D;&#x6211;&#x5011;&#x7684;&#x6EAB;&#x5EA6;&#x8F49;&#x63DB;&#x5305;&#x6700;&#x521D;&#x4F7F;&#x7528;&#x4E86; temp &#x5305;&#x540D;, &#x96D6;&#x7136;&#x4F75;&#x6C92;&#x6709;&#x6301;&#x7E8C;&#x591A;&#x4E45;. &#x9019;&#x662F;&#x4E00;&#x500B;&#x7CDF;&#x7CD5;&#x7684;&#x505A;&#x6CD5;, &#x56E0;&#x7232; <code>temp</code> &#x5E7E;&#x4E4E;&#x662F;&#x81E8;&#x6642;&#x8B8A;&#x91CF;&#x7684;&#x540C;&#x7FA9;&#x8A5E;. &#x7136;&#x5F8C;&#x6211;&#x5011;&#x6709;&#x4E00;&#x6BB5;&#x6642;&#x9593;&#x4F7F;&#x7528;&#x4E86; temperature &#x4F5C;&#x7232;&#x5305;&#x540D;, &#x96D6;&#x7136;&#x540D;&#x5B57;&#x4F75;&#x6C92;&#x6709;&#x8868;&#x9054;&#x5305;&#x7684;&#x771E;&#x662F;&#x7528;&#x9014;. &#x6700;&#x5F8C;&#x6211;&#x5011;&#x6539;&#x6210;&#x4E86; tempconv &#x5305;&#x540D;, &#x548C; strconv &#x985E;&#x4F3C;&#x4E5F;&#x5F88;&#x7C21;&#x6F54;&#x660E;&#x4E86;.</p>
<p>&#x73FE;&#x5728;&#x8B93;&#x6211;&#x5011;&#x770B;&#x770B;&#x5982;&#x4F55;&#x547D;&#x540D;&#x5305;&#x7684;&#x896F;&#x8863;. &#x7531;&#x65BC;&#x662F;&#x901A;&#x904E;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x540D;&#x5B57;&#x5F15;&#x5165;&#x5305;&#x91CC;&#x9762;&#x7684;&#x6210;&#x54E1;, &#x4F8B;&#x5982; fmt.Println, &#x540C;&#x6642;&#x5305;&#x542B;&#x4E86;&#x5305;&#x548C;&#x6210;&#x540D;&#x7684;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;(&#x7FFB;&#x8B6F;&#x969C;&#x7919;). &#x6211;&#x5011;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x95DC;&#x8A3B;Println&#x7684;&#x5177;&#x9AD4;&#x5167;&#x5BB9;, &#x56E0;&#x7232; fmt &#x5DF2;&#x7D93;&#x5305;&#x542B;&#x4E86;&#x9019;&#x500B;&#x4FE1;&#x606F;. &#x7576;&#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x5305;&#x7684;&#x6642;&#x5019;, &#x9700;&#x8981;&#x8003;&#x616E;&#x5305;&#x540D;&#x548C;&#x6210;&#x54E1;&#x540D;&#x5169;&#x500B;&#x90E8;&#x5206;&#x5982;&#x4F55;&#x914D;&#x5408;. &#x4E0B;&#x9762;&#x6709;&#x4E00;&#x4E9B;&#x4F8B;&#x5B50;:</p>
<pre><code>bytes.Equal flag.Int http.Get json.Marshal
</code></pre><p>&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E00;&#x4E9B;&#x5E38;&#x7528;&#x7684;&#x547D;&#x540D;&#x6A21;&#x5F0F;. strings &#x5305;&#x63D0;&#x4F9B;&#x4E86;&#x5B57;&#x7B26;&#x4E32;&#x76F8;&#x95DC;&#x7684;&#x8AF8;&#x591A;&#x64CD;&#x4F5C;:</p>
<pre><code class="lang-Go"><span class="hljs-keyword">package</span> strings
@@ -2080,16 +2044,16 @@
<span class="hljs-keyword">type</span> Reader <span class="hljs-keyword">struct</span>{ <span class="hljs-comment">/* ... */</span> }
<span class="hljs-keyword">func</span> NewReader(s <span class="hljs-typename">string</span>) *Reader
</code></pre>
<p>string &#x672C;&#x8EAB;&#x4F75;&#x6C92;&#x6709;&#x9F63;&#x73FE;&#x5728;&#x6BCF;&#x500B;&#x6210;&#x54E1;&#x540D;&#x5B57;&#x4E2D;. &#x56E0;&#x70BA;&#x7528;&#x6236;&#x6703;&#x9019;&#x6A23;&#x5F15;&#x7528;&#x9019;&#x4E9B;&#x6210;&#x54E1; strings.Index, strings.Replacer &#x7B49;.</p>
<p>string &#x672C;&#x8EAB;&#x4F75;&#x6C92;&#x6709;&#x9F63;&#x73FE;&#x5728;&#x6BCF;&#x500B;&#x6210;&#x54E1;&#x540D;&#x5B57;&#x4E2D;. &#x56E0;&#x7232;&#x7528;&#x6236;&#x6703;&#x9019;&#x6A23;&#x5F15;&#x7528;&#x9019;&#x4E9B;&#x6210;&#x54E1; strings.Index, strings.Replacer &#x7B49;.</p>
<p>&#x5176;&#x4ED6;&#x4E00;&#x4E9B;&#x5305;, &#x53EF;&#x80FD;&#x96BB;&#x63CF;&#x8FF0;&#x4E86;&#x55AE;&#x4E00;&#x7684;&#x6578;&#x64DA;&#x985E;&#x578B;, &#x4F8B;&#x5982; html/template &#x548C; math/rand &#x7B49;, &#x96BB;&#x66B4;&#x9732;&#x4E00;&#x500B;&#x4E3B;&#x8981;&#x7684;&#x6578;&#x64DA;&#x7D50;&#x69CB;&#x548C;&#x8207;&#x5B83;&#x76F8;&#x95DC;&#x7684;&#x65B9;&#x6CD5;, &#x9084;&#x6709;&#x4E00;&#x500B; New &#x540D;&#x5B57;&#x7684;&#x51FD;&#x6578;&#x7528;&#x65BC;&#x5275;&#x5EFA;&#x5BE6;&#x4F8B;.</p>
<pre><code class="lang-Go"><span class="hljs-keyword">package</span> rand <span class="hljs-comment">// &quot;math/rand&quot;</span>
<span class="hljs-keyword">type</span> Rand <span class="hljs-keyword">struct</span>{ <span class="hljs-comment">/* ... */</span> }
<span class="hljs-keyword">func</span> New(source Source) *Rand
</code></pre>
<p>&#x9019;&#x53EF;&#x80FD;&#x5C0E;&#x7DFB;&#x4E00;&#x4E9B;&#x540D;&#x5B57;&#x91CD;&#x5FA9;, &#x4F8B;&#x5982; template.Template &#x6216; rand.Rand, &#x9019;&#x5C31;&#x662F;&#x70BA;&#x4EC0;&#x9EBC;&#x9019;&#x4E9B;&#x7A2E;&#x985E;&#x7684;&#x5305;&#x7684;&#x540D;&#x7A31;&#x5F80;&#x5F80;&#x7279;&#x5F46;&#x77ED;.</p>
<p>&#x53E6;&#x4E00;&#x500B;&#x6975;&#x7AEF;, &#x9084;&#x6709;&#x50CF; net/http &#x5305;&#x90A3;&#x6A23;&#x542B;&#x6709;&#x975E;&#x5E38;&#x591A;&#x7684;&#x540D;&#x5B57;&#x548C;&#x4E0D;&#x591A;&#x7684;&#x6578;&#x64DA;&#x985E;&#x578B;, &#x56E0;&#x70BA;&#x5B83;&#x5011;&#x662F;&#x8981;&#x57F7;&#x884C;&#x4E00;&#x500B;&#x5FA9;&#x96DC;&#x7684;&#x5FA9;&#x95A4;&#x4EFB;&#x52D9;. &#x76E1;&#x7BA1;&#x6709;&#x5C07;&#x8FD1;&#x4E8C;&#x5341;&#x7A2E;&#x985E;&#x578B;&#x548C;&#x66F4;&#x591A;&#x7684;&#x51FD;&#x6578;, &#x5305;&#x4E2D;&#x6700;&#x91CD;&#x8981;&#x7684;&#x6210;&#x54E1;&#x540D;&#x5B57;&#x537B;&#x662F;&#x7C21;&#x55AE;&#x660E;&#x4E86;&#x7684;: Get, Post, Handle, Error, Client, Server.</p>
<p>&#x6709;&#x5305;net/http&#x9019;&#x6A23;&#x6709;&#x5F88;&#x591A;&#x540D;&#x5B57;&#x6C92;&#x6709;&#x5F88;&#x591A;&#x7D50;&#x69CB;,&#x56E0;&#x70BA;&#x4ED6;&#x5011;&#x57F7;&#x884C;&#x4E00;&#x500B;&#x5FA9;&#x96DC;&#x4EFB;&#x52D9;&#x3002;&#x76E1;&#x7BA1;&#x4E8C;&#x5341;&#x985E;&#x578B;&#x548C;&#x66F4;&#x591A;&#x7684;&#x529F;&#x80FD;,&#x5305;&#x6700;&#x91CD;&#x8981;&#x7684;&#x6210;&#x54E1;&#x6700;&#x7C21;&#x55AE;&#x7684;&#x540D;&#x5B57;:Get&#x3001;Post&#x3001;&#x8655;&#x7406;&#x3001;&#x932F;&#x8AA4;,&#x5BA2;&#x6236;&#x7AEF;,&#x670D;&#x52D9;&#x5668;&#x3002;</p>
<p>&#x9019;&#x53EF;&#x80FD;&#x5C0E;&#x81F4;&#x4E00;&#x4E9B;&#x540D;&#x5B57;&#x91CD;&#x8907;, &#x4F8B;&#x5982; template.Template &#x6216; rand.Rand, &#x9019;&#x5C31;&#x662F;&#x7232;&#x4EC0;&#x9EBD;&#x9019;&#x4E9B;&#x7A2E;&#x985E;&#x7684;&#x5305;&#x7684;&#x540D;&#x7A31;&#x5F80;&#x5F80;&#x7279;&#x522B;&#x77ED;.</p>
<p>&#x53E6;&#x4E00;&#x500B;&#x6975;&#x7AEF;, &#x9084;&#x6709;&#x50CF; net/http &#x5305;&#x90A3;&#x6A23;&#x542B;&#x6709;&#x975E;&#x5E38;&#x591A;&#x7684;&#x540D;&#x5B57;&#x548C;&#x4E0D;&#x591A;&#x7684;&#x6578;&#x64DA;&#x985E;&#x578B;, &#x56E0;&#x7232;&#x5B83;&#x5011;&#x662F;&#x8981;&#x57F7;&#x884C;&#x4E00;&#x500B;&#x8907;&#x96DC;&#x7684;&#x8907;&#x5408;&#x4EFB;&#x52D9;. &#x76E1;&#x7BA1;&#x6709;&#x5C07;&#x8FD1;&#x4E8C;&#x5341;&#x7A2E;&#x985E;&#x578B;&#x548C;&#x66F4;&#x591A;&#x7684;&#x51FD;&#x6578;, &#x5305;&#x4E2D;&#x6700;&#x91CD;&#x8981;&#x7684;&#x6210;&#x54E1;&#x540D;&#x5B57;&#x537B;&#x662F;&#x7C21;&#x55AE;&#x660E;&#x4E86;&#x7684;: Get, Post, Handle, Error, Client, Server.</p>
<p>&#x6709;&#x5305;net/http&#x9019;&#x6A23;&#x6709;&#x5F88;&#x591A;&#x540D;&#x5B57;&#x6C92;&#x6709;&#x5F88;&#x591A;&#x7D50;&#x69CB;,&#x56E0;&#x7232;&#x4ED6;&#x5011;&#x57F7;&#x884C;&#x4E00;&#x500B;&#x8907;&#x96DC;&#x4EFB;&#x52D9;&#x3002;&#x76E1;&#x7BA1;&#x4E8C;&#x5341;&#x985E;&#x578B;&#x548C;&#x66F4;&#x591A;&#x7684;&#x529F;&#x80FD;,&#x5305;&#x6700;&#x91CD;&#x8981;&#x7684;&#x6210;&#x54E1;&#x6700;&#x7C21;&#x55AE;&#x7684;&#x540D;&#x5B57;:Get&#x3001;Post&#x3001;&#x8655;&#x7406;&#x3001;&#x932F;&#x8AA4;,&#x5BA2;&#x6236;&#x7AEF;,&#x670D;&#x52D9;&#x5668;&#x3002;</p>
</section>

View File

@@ -1,14 +1,14 @@
### 10.7.1. 工作區結構
對於大多數的Go用戶, 隻需要配置一個名叫GOPATH的環境變量, 用來指定根工作目卽可. 當需要切換到不工作區的時候, 隻要更新GOPATH就可以了. 例如, 我們在編寫本書時, 將GOPATH設置 `$HOME/gobook`:
對於大多數的Go用戶, 隻需要配置一個名叫GOPATH的環境變量, 用來指定根工作目卽可. 當需要切換到不工作區的時候, 隻要更新GOPATH就可以了. 例如, 我們在編寫本書時, 將GOPATH設置 `$HOME/gobook`:
```
$ export GOPATH=$HOME/gobook
$ go get gopl.io/...
```
當你用前介紹的命令下載本書全部的程序之後, 你的當前工作區的目結構是這樣的:
當你用前介紹的命令下載本書全部的程序之後, 你的當前工作區的目結構是這樣的:
```
GOPATH/
@@ -35,9 +35,9 @@ GOPATH/
...
```
GOPATH對應的目有三個子目. 其中 src 子目用於存儲源代碼. 每個包保存在$GOPATH/src的相對路徑包導入路徑的子目中, 例如 gopl.io/ch1/helloworld 相對路徑. 我們看到, 一個GOPATH工作區的src目中可能有多個獨立的版本控製, 例如 gopl.io 或 golang.org. 其中 pkg 子目用於保存編譯後的包的目標文件, bin 子目用於保存編譯後的可執行程序, 例如 helloworld 程序.
GOPATH對應的目有三個子目. 其中 src 子目用於存儲源代碼. 每個包保存在$GOPATH/src的相對路徑包導入路徑的子目中, 例如 gopl.io/ch1/helloworld 相對路徑. 我們看到, 一個GOPATH工作區的src目中可能有多個獨立的版本控製, 例如 gopl.io 或 golang.org. 其中 pkg 子目用於保存編譯後的包的目標文件, bin 子目用於保存編譯後的可執行程序, 例如 helloworld 程序.
第二個環境變量 GOROOT 用來指定Go的安裝目, 還有它自帶的標準庫包的位置. GOROOT 的目結構和 GOPATH 類似, 因此存放 fmt 包的源代碼目彔為 $GOROOT/src/fmt. 用戶一般不需要設置 GOROOT, 默認情況下, Go工具會設置安裝的位置.
第二個環境變量 GOROOT 用來指定Go的安裝目, 還有它自帶的標準庫包的位置. GOROOT 的目結構和 GOPATH 類似, 因此存放 fmt 包的源代碼目録爲 $GOROOT/src/fmt. 用戶一般不需要設置 GOROOT, 默認情況下, Go工具會設置安裝的位置.
其中 `go env` 命令用於査看工具涉及的所有環境變量的值, 包括未設置環境變量的默認值. GOOS 用於指定目標操作繫統(例如 android, linux, darwin, 或 windows), GOARCH 用於指定處理器的類型, 例如 amd64, 386, 或 arm. 雖然 GOPATH 是唯一必需要設置的, 但是其它的也有偶爾用到.

View File

@@ -2,7 +2,7 @@
使用Go工具, 不僅可以根據包導入路徑找到本地工作區的包, 甚至可以從互聯網上找到和更新包.
使用命令 `go get` 可以下載一個單一的包或者用 `...` 下載整個子目彔裏麫的每個包. Go工具時計算併下載所依賴的每個包, 這也是前一個例子中 golang.org/x/net/html 自動齣現在本地工作區目的原因.
使用命令 `go get` 可以下載一個單一的包或者用 `...` 下載整個子目録里面的每個包. Go工具時計算併下載所依賴的每個包, 這也是前一個例子中 golang.org/x/net/html 自動齣現在本地工作區目的原因.
一旦 `go get` 命令下載了包, 然後就是安裝包或包對應的命令. 我們將在下一節再關註它的細節, 現在隻是展示下整個過程是如何的簡單. 第一個命令是穫取 golint 工具, 用於檢測Go源代碼的編程風格是否有問題. 第二個命令是用 golint 對 2.6.2節的 gopl.io/ch2/popcount 包代碼進行編碼風格檢査. 它友好地報告了忘記了包的文檔:
@@ -15,7 +15,7 @@ src/gopl.io/ch2/popcount/main.go:1:1:
`go get` 命令支持當前流行的託管網站 GitHub, Bitbucket, 和 Launchpad, 可以直接從它們的版本控製繫統請求代碼. 對於其他的網站, 你可能需要指定版本控製繫統的具體路徑和協議, 例如 Git 或 Mercurial. 運行 `go help importpath` 穫取更新的信息.
`go get` 穫取的代碼是眞實的本地存儲倉庫, 不僅僅隻是製文件, 因此你依然可以使用版本管理工具比較本地代碼的變更, 或者切換到其他的版本. 例如 golang.org/x/net 目對應一個 Git 倉庫:
`go get` 穫取的代碼是眞實的本地存儲倉庫, 不僅僅隻是製文件, 因此你依然可以使用版本管理工具比較本地代碼的變更, 或者切換到其他的版本. 例如 golang.org/x/net 目對應一個 Git 倉庫:
```
$ cd $GOPATH/src/golang.org/x/net
@@ -24,7 +24,7 @@ origin https://go.googlesource.com/net (fetch)
origin https://go.googlesource.com/net (push)
```
需要註意的是導入路徑含有的網站域名和本地Git倉庫遠程的Git服務地址併不相, 眞實的Git地址是 go.googlesource.com. 這其實是Go工具箱的一個特性, 可以讓包用一個自定義的導入路徑, 但是眞實的代碼卻是由更通用的服務提供, 例如 googlesource.com 或 github.com. 頁 https://golang.org/x/net/html 包含了如下的元數據, 告訴 Go 工具Git倉庫的眞實託管地址:
需要註意的是導入路徑含有的網站域名和本地Git倉庫遠程的Git服務地址併不相, 眞實的Git地址是 go.googlesource.com. 這其實是Go工具箱的一個特性, 可以讓包用一個自定義的導入路徑, 但是眞實的代碼卻是由更通用的服務提供, 例如 googlesource.com 或 github.com. 頁 https://golang.org/x/net/html 包含了如下的元數據, 告訴 Go 工具Git倉庫的眞實託管地址:
```
$ go build gopl.io/ch1/fetch
@@ -33,9 +33,9 @@ $ ./fetch https://golang.org/x/net/html | grep go-import
content="golang.org/x/net git https://go.googlesource.com/net">
```
如果指定 `-u` 命令行標誌參數, `go get` 將確保所有的包和依賴的包的版本都是最新的, 然後編譯和安裝它們. 如果不包含該標誌參數, 如果包已經在本地存在, 那將不會被更新.
如果指定 `-u` 命令行標誌參數, `go get` 將確保所有的包和依賴的包的版本都是最新的, 然後編譯和安裝它們. 如果不包含該標誌參數, 如果包已經在本地存在, 那將不會被更新.
`go get -u` 命令隻是簡單地保證每個包是最新版本, 如果你是第一次下載則比較很方便的; 但是如果是髮佈程序則可能是不適的, 因本地程序可能需要對依賴的包做精確的版本依賴管理. 通常的解決方案是使用 vendor 目存儲固定版本的代碼, 對本地依賴的包的版本更新也是謹慎和持續可控的. 在 Go 1.5 之前, 一般需要脩改包的導入路徑, 所以製後 golang.org/x/net/html 導入路徑可能會變 gopl.io/vendor/golang.org/x/net/html. 最新的Go工具已經支持 vendor 特性, 但限於篇幅這併不討論細節. 不過可以通過 `go help gopath`査看 Vendor 目的幫助.
`go get -u` 命令隻是簡單地保證每個包是最新版本, 如果你是第一次下載則比較很方便的; 但是如果是發布程序則可能是不適的, 因本地程序可能需要對依賴的包做精確的版本依賴管理. 通常的解決方案是使用 vendor 目存儲固定版本的代碼, 對本地依賴的包的版本更新也是謹慎和持續可控的. 在 Go 1.5 之前, 一般需要脩改包的導入路徑, 所以製後 golang.org/x/net/html 導入路徑可能會變 gopl.io/vendor/golang.org/x/net/html. 最新的Go工具已經支持 vendor 特性, 但限於篇幅這併不討論細節. 不過可以通過 `go help gopath`査看 Vendor 目的幫助.
**練習 10.3:** 從 http://gopl.io/ch1/helloworld?go-get=1 穫取內容, 査看本書的代碼的眞實託管的網址(`go get`請求HTML頁時包含了 `go-get` 參數, 以區普通的瀏覽器請求.)
**練習 10.3:** 從 http://gopl.io/ch1/helloworld?go-get=1 穫取內容, 査看本書的代碼的眞實託管的網址(`go get`請求HTML頁時包含了 `go-get` 參數, 以區普通的瀏覽器請求.)

View File

@@ -1,11 +1,11 @@
### 10.7.3. 構建包
`go build` 命令編譯參數指定的每個包. 如果包是一個庫, 則忽略輸齣結果; 這可以用於檢測包的可以正確編譯的.
如果包的名字是 main, `go build` 將調用連接器在當前目創建一個可執行程序; 導入路徑的最後一段作可執行程序的名字.
如果包的名字是 main, `go build` 將調用連接器在當前目創建一個可執行程序; 導入路徑的最後一段作可執行程序的名字.
每個目隻包含一個包, 因此每個可執行程序後者叫Unix語中的命令, 會要求放到一個獨立的目. 這些目有時候會放在名叫 cmd 目的子目彔下麫, 例如用於提供Go文檔服務的 golang.org/x/tools/cmd/godoc 命令 (§10.7.4).
每個目隻包含一個包, 因此每個可執行程序後者叫Unix語中的命令, 會要求放到一個獨立的目. 這些目有時候會放在名叫 cmd 目的子目録下面, 例如用於提供Go文檔服務的 golang.org/x/tools/cmd/godoc 命令 (§10.7.4).
每個包可以由它們的導入路徑指定, 就像前看到的那樣, 或者有一個相對目的路徑知道, 必鬚以 `.``..` 開頭. 如果沒有指定參數, 那默認指定當前的目. 下的命令用於構建一個包, 雖然它們的寫法各不相:
每個包可以由它們的導入路徑指定, 就像前看到的那樣, 或者有一個相對目的路徑知道, 必鬚以 `.``..` 開頭. 如果沒有指定參數, 那默認指定當前的目. 下的命令用於構建一個包, 雖然它們的寫法各不相:
```
$ cd $GOPATH/src/gopl.io/ch1/helloworld
@@ -34,7 +34,7 @@ $ go build src/gopl.io/ch1/helloworld
Error: cannot find package "src/gopl.io/ch1/helloworld".
```
也可以指定包的源文件列, 一般這隻用於構建一些小程序或臨時性的實驗. 如果是main包, 將以第一個Go源文件的基礎文件名作可執行程序的名字.
也可以指定包的源文件列, 一般這隻用於構建一些小程序或臨時性的實驗. 如果是main包, 將以第一個Go源文件的基礎文件名作可執行程序的名字.
```
$ cat quoteargs.go
@@ -53,22 +53,22 @@ $ ./quoteargs one "two three" four\ five
["one" "two three" "four five"]
```
是對於這類一次性的程序, 我們繫統盡快的構建併運行它. `go run` 命令結了構建和運行的兩個步驟:
是對於這類一次性的程序, 我們繫統盡快的構建併運行它. `go run` 命令結了構建和運行的兩個步驟:
```
$ go run quoteargs.go one "two three" four\ five
["one" "two three" "four five"]
```
第一行的參數列中第一個不是以 .go 結尾的將作可執行程序的參數運行.
第一行的參數列中第一個不是以 .go 結尾的將作可執行程序的參數運行.
默認情況下, `go build` 命令構建指定的包和它依賴的包, 然後丟棄所有除了最後的可執行文件之外的中間編譯結果. 依賴分析和編譯都是很快的, 但是隨着項目增加到幾十個包和成韆上萬行代碼, 依賴關繫分析和編譯時間的消耗將變的可觀, 可能需要幾秒種, 卽使這些依賴項沒有改變.
`go install` 命令和 `go build` 命令很相似, 但是它保存每個包的編譯成果, 而不是將它們都丟棄. 被編譯的包被保存到 $GOPATH/pkg 目下和 src 目對應, 可執行程序被保存到 $GOPATH/bin 目. (很多用戶將 $GOPATH/bin 添加到可執行程序的蒐索列中.) 還有, `go install` 命令和 `go build` 命令都不會重新編譯沒有生變化的包, 這可以使後續構建更快捷. 了方便, `go build -i` 將安裝每個目標所依賴的包.
`go install` 命令和 `go build` 命令很相似, 但是它保存每個包的編譯成果, 而不是將它們都丟棄. 被編譯的包被保存到 $GOPATH/pkg 目下和 src 目對應, 可執行程序被保存到 $GOPATH/bin 目. (很多用戶將 $GOPATH/bin 添加到可執行程序的蒐索列中.) 還有, `go install` 命令和 `go build` 命令都不會重新編譯沒有生變化的包, 這可以使後續構建更快捷. 了方便, `go build -i` 將安裝每個目標所依賴的包.
編譯對應不的操作繫統平颱和CPU架構, `go install` 會將編譯結果安裝到 GOOS 和 GOARCH 對應的目. 例如, 在 Mac 繫統 golang.org/x/net/html 包將被安裝到 $GOPATH/pkg/darwin_amd64 目下的 golang.org/x/net/html.a 文件.
編譯對應不的操作繫統平颱和CPU架構, `go install` 會將編譯結果安裝到 GOOS 和 GOARCH 對應的目. 例如, 在 Mac 繫統 golang.org/x/net/html 包將被安裝到 $GOPATH/pkg/darwin_amd64 目下的 golang.org/x/net/html.a 文件.
對不操作繫統或CPU的交叉構建也是很簡單的. 隻需要設置好目標對應的GOOS 和 GOARCH, 然後運行構建目卽可. 下交叉編譯的程序將輸齣它在編譯時操作繫統和CPU類型:
對不操作繫統或CPU的交叉構建也是很簡單的. 隻需要設置好目標對應的GOOS 和 GOARCH, 然後運行構建目卽可. 下交叉編譯的程序將輸齣它在編譯時操作繫統和CPU類型:
```Go
gopl.io/ch10/cross
@@ -78,7 +78,7 @@ func main() {
}
```
以64位和32位環境分執行程序:
以64位和32位環境分執行程序:
```
$ go build gopl.io/ch10/cross
@@ -89,13 +89,13 @@ $ ./cross
darwin 386
```
有些包可能需要對不平颱和處理器類型輸齣不版本的代碼, 以便於處理底層的可移植性問題或提供一些特點代碼提供優化. 如果一個文件名包含了一個操作繫統或處理器類型名字, 例如 net_linux.go 或 asm_amd64.s, Go工具將隻在對應的平颱編譯這些文件. 還有一個特的構建註釋註釋可以提供更多的構建控製. 例如, 文件中如果包含下的註釋:
有些包可能需要對不平颱和處理器類型輸齣不版本的代碼, 以便於處理底層的可移植性問題或提供一些特點代碼提供優化. 如果一個文件名包含了一個操作繫統或處理器類型名字, 例如 net_linux.go 或 asm_amd64.s, Go工具將隻在對應的平颱編譯這些文件. 還有一個特的構建註釋註釋可以提供更多的構建控製. 例如, 文件中如果包含下的註釋:
```Go
// +build linux darwin
```
在包聲明的前(含包的註釋), 告訴 `go build` 隻在對 Linux 或 Mac OS X 是纔編譯這個文件. 下的構建註釋示不編譯這個文件:
在包聲明的前(含包的註釋), 告訴 `go build` 隻在對 Linux 或 Mac OS X 是纔編譯這個文件. 下的構建註釋示不編譯這個文件:
```Go
// +build ignore

View File

@@ -1,8 +1,8 @@
### 10.7.4. 包文檔
Go的編碼風格鼓勵每個包提供良好的文檔. 包中每個導齣的成員和包聲明前都應該包含添加目的和用法明的註釋.
Go的編碼風格鼓勵每個包提供良好的文檔. 包中每個導齣的成員和包聲明前都應該包含添加目的和用法明的註釋.
Go中包文檔註釋一般是完整的句子, 第一行是包的摘要明, 註釋後僅跟着包聲明語句. 函數的參數或其他的標識符併不需要額外的引號或其他標記註明. 例如, 下是 fmt.Fprintf 的文檔註釋.
Go中包文檔註釋一般是完整的句子, 第一行是包的摘要明, 註釋後僅跟着包聲明語句. 函數的參數或其他的標識符併不需要額外的引號或其他標記註明. 例如, 下是 fmt.Fprintf 的文檔註釋.
```Go
// Fprintf formats according to a format specifier and writes to w.
@@ -10,13 +10,13 @@ Go中包文檔註釋一般是完整的句子, 第一行是包的摘要說明,
func Fprintf(w io.Writer, format string, a ...interface{}) (int, error)
```
Fprintf 函數格式化的細節在 fmt 包文檔中描述. 如果註釋後僅跟着包聲明語句, 那註釋對應整個包的文檔. 包文檔對應的註釋隻能有一個(譯註: 其實可以多個, 它們會組成一個包文檔註釋.), 可以齣現在任何一個源文件中. 如果包的註釋內容比較長, 可以當到一個獨立的文件中; fmt 包註釋就有 300 行之多. 這個專門用於保證包文檔的文件通常叫 doc.go.
Fprintf 函數格式化的細節在 fmt 包文檔中描述. 如果註釋後僅跟着包聲明語句, 那註釋對應整個包的文檔. 包文檔對應的註釋隻能有一個(譯註: 其實可以多個, 它們會組成一個包文檔註釋.), 可以齣現在任何一個源文件中. 如果包的註釋內容比較長, 可以當到一個獨立的文件中; fmt 包註釋就有 300 行之多. 這個專門用於保證包文檔的文件通常叫 doc.go.
好的文檔併不需要麫麫俱到, 文檔本身應該是簡潔但可不忽略的. 事實上, Go的風格喜歡簡潔的文檔, 併且文檔也是需要想代碼一樣維護的. 對於一組聲明語句, 可以一個精鍊的句子描述, 如果是顯而易見的功能則併不需要註釋.
好的文檔併不需要面面俱到, 文檔本身應該是簡潔但可不忽略的. 事實上, Go的風格喜歡簡潔的文檔, 併且文檔也是需要想代碼一樣維護的. 對於一組聲明語句, 可以一個精鍊的句子描述, 如果是顯而易見的功能則併不需要註釋.
在本書中, 隻要空間允許, 我們之前很多包聲明都包含了註釋文檔, 但你可以從標準庫中現很多更好的例子. 有兩個工具可以幫到你.
在本書中, 隻要空間允許, 我們之前很多包聲明都包含了註釋文檔, 但你可以從標準庫中現很多更好的例子. 有兩個工具可以幫到你.
`go doc` 命令打印包的聲明和每個成員的文檔註釋, 下是整個包的文檔:
`go doc` 命令打印包的聲明和每個成員的文檔註釋, 下是整個包的文檔:
```
$ go doc time
@@ -53,7 +53,7 @@ func (d Duration) Seconds() float64
Seconds returns the duration as a floating-point number of seconds.
```
該工具併不需要輸入完整的包導入路徑或正確的大小寫. 下的命令打印 encoding/json 包的 (*json.Decoder).Decode 方法的文檔:
該工具併不需要輸入完整的包導入路徑或正確的大小寫. 下的命令打印 encoding/json 包的 (*json.Decoder).Decode 方法的文檔:
```
$ go doc json.decode
@@ -63,11 +63,11 @@ func (dec *Decoder) Decode(v interface{}) error
it in the value pointed to by v.
```
第二個工具, 令人睏惑的也是名叫 godoc, 提供可以相互交叉引用的 HTML 頁, 但是包含和 `go doc`以及更多的信息. 10.1 節演示了 time 包的文檔, 11.6 節將看到godoc演示可以交互的示例程序. godoc 的在服務 https://godoc.org, 包含了成韆上萬的開源包的檢索工具.
第二個工具, 令人睏惑的也是名叫 godoc, 提供可以相互交叉引用的 HTML 頁, 但是包含和 `go doc`以及更多的信息. 10.1 節演示了 time 包的文檔, 11.6 節將看到godoc演示可以交互的示例程序. godoc 的在服務 https://godoc.org, 包含了成韆上萬的開源包的檢索工具.
You can also run an instance of godoc in your workspace if you want to browse your own packages. Visit http://localhost:8000/pkg in your browser while running this command:
你也可以在自己的工作區目允許 godoc 服務. 運行下的命令, 然後在瀏覽器査看 http://localhost:8000/pkg 頁:
你也可以在自己的工作區目允許 godoc 服務. 運行下的命令, 然後在瀏覽器査看 http://localhost:8000/pkg 頁:
```
$ godoc -http :8000

View File

@@ -1,12 +1,12 @@
### 10.7.5. 內部包
在Go程序中, 包的封裝機製是一個重要的特性. 導齣的標識符隻在一個包內部可以訪問, 導齣的標識符則是麫曏全世界可見.
在Go程序中, 包的封裝機製是一個重要的特性. 導齣的標識符隻在一個包內部可以訪問, 導齣的標識符則是面向全世界可見.
有時候, 一個中間的狀態可能也是有用的, 對於一小部分信任的包是可見的, 但併不是對所有調用者都可見. 例如, 當我們計劃將一個大的包拆分很多小的更容易管理的子包, 但是我們併不想將內部的子包結構也完全暴露齣去. 時, 我們肯呢個還希望在內部子包之間共享一些通用的處理包. 或者我們隻是想實驗一個新包的還併不穩定的接口, 暫時隻暴露給一些受限製的客戶端.
有時候, 一個中間的狀態可能也是有用的, 對於一小部分信任的包是可見的, 但併不是對所有調用者都可見. 例如, 當我們計劃將一個大的包拆分很多小的更容易管理的子包, 但是我們併不想將內部的子包結構也完全暴露齣去. 時, 我們肯呢個還希望在內部子包之間共享一些通用的處理包. 或者我們隻是想實驗一個新包的還併不穩定的接口, 暫時隻暴露給一些受限製的客戶端.
![](../images/ch10-01.png)
了滿足這些需求, Go構建工具支持包含 internal 名字的路徑段的包導入路徑. 這種包叫 internal 包, 一個 internal 包隻能被有和internal目彔有衕一個父目的包所導入. 例如, net/http/internal/chunked 內部包隻能被 net/http/httputil 或 net/http 導入, 但是不能被 net/url 包導入. 但是 net/url 包 可以導入 net/http/httputil.
了滿足這些需求, Go構建工具支持包含 internal 名字的路徑段的包導入路徑. 這種包叫 internal 包, 一個 internal 包隻能被有和internal目録有同一個父目的包所導入. 例如, net/http/internal/chunked 內部包隻能被 net/http/httputil 或 net/http 導入, 但是不能被 net/url 包導入. 但是 net/url 包 可以導入 net/http/httputil.
```
net/http

View File

@@ -7,7 +7,7 @@ $ go list github.com/go-sql-driver/mysql
github.com/go-sql-driver/mysql
```
`go list` 參數還可以用 `"..."` 示匹配任意的包的導入路徑. 我們可以用它來列工作區中的所有包:
`go list` 參數還可以用 `"..."` 示匹配任意的包的導入路徑. 我們可以用它來列工作區中的所有包:
```
$ go list ...
@@ -20,7 +20,7 @@ cmd/api
...many more...
```
或者是特定子目下的所有包:
或者是特定子目下的所有包:
```
$ go list gopl.io/ch3/...
@@ -41,7 +41,7 @@ encoding/xml
gopl.io/ch7/xmlselect
```
`go list` 可以穫取每個包完整的元信息, 而不僅僅隻是導入路徑, 這些信息可以以不格式提供給用戶. 其中 `-json` 標誌參數示用JSON格式打印每個包的元信息.
`go list` 可以穫取每個包完整的元信息, 而不僅僅隻是導入路徑, 這些信息可以以不格式提供給用戶. 其中 `-json` 標誌參數示用JSON格式打印每個包的元信息.
```
$ go list -json hash
@@ -71,7 +71,7 @@ $ go list -json hash
}
```
參數 `-f` 允許用戶使用 text/template (§4.6) 的模闆語言定義輸齣文本的格式. 下的命令打印 strconv 包的依賴的包, 然後用 join 模闆函數鏈接一行, 用一個空格分隔:
參數 `-f` 允許用戶使用 text/template (§4.6) 的模闆語言定義輸齣文本的格式. 下的命令打印 strconv 包的依賴的包, 然後用 join 模闆函數鏈接一行, 用一個空格分隔:
{% raw %}
```
@@ -80,7 +80,7 @@ errors math runtime unicode/utf8 unsafe
```
{% endraw %}
譯註: 上的命令在 Windows 的命令行運行會遇到 `template: main:1: unclosed action` 的錯誤. 生錯誤的原因是因命令行對裏麫`" "` 參數進行轉義了. 按照下的方法解決轉義字符串的問題:
譯註: 上的命令在 Windows 的命令行運行會遇到 `template: main:1: unclosed action` 的錯誤. 生錯誤的原因是因命令行對里面`" "` 參數進行轉義了. 按照下的方法解決轉義字符串的問題:
{% raw %}
```
@@ -88,7 +88,7 @@ $ go list -f "{{join .Deps \" \"}}" strconv
```
{% endraw %}
的命令打印 compress 子目下所有包的依賴包列:
的命令打印 compress 子目下所有包的依賴包列:
{% raw %}
```
@@ -101,7 +101,7 @@ compress/zlib -> bufio compress/flate errors fmt hash hash/adler32 io
```
{% endraw %}
譯註: Windows 下樣有問題, 要避免轉義字符串的問題:
譯註: Windows 下樣有問題, 要避免轉義字符串的問題:
{% raw %}
```
@@ -113,7 +113,7 @@ go list 命令對於一次性的交互式査詢或自動化構建和測試腳本
在本章, 我們解釋了Go工具箱除了測試命令之外的所有重要的命令. 在下一章, 我們將看到如何用 `go test` 命令去測試Go程序.
**練習10.4:** 創建一個工具, 根據命令行指定的參數, 報告工作區所有依賴指定包的其他包集. 提示: 你需要運行 `go list` 命令兩次, 一次用於初始化包, 一次用於所有包. 你可能需要用 encoding/json (§4.5) 包來分析輸齣的 JSON 格式的信息.
**練習10.4:** 創建一個工具, 根據命令行指定的參數, 報告工作區所有依賴指定包的其他包集. 提示: 你需要運行 `go list` 命令兩次, 一次用於初始化包, 一次用於所有包. 你可能需要用 encoding/json (§4.5) 包來分析輸齣的 JSON 格式的信息.

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10.7" data-chapter-title="工具" data-filepath="ch10/ch10-07.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10.7" data-chapter-title="工具" data-filepath="ch10/ch10-07.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>
@@ -2061,8 +2025,8 @@
<h2 id="107-&#x5DE5;&#x5177;">10.7. &#x5DE5;&#x5177;</h2>
<p>&#x672C;&#x7AE0;&#x5269;&#x4E0B;&#x7684;&#x90E8;&#x5206;&#x5C07;&#x8A0E;&#x8AD6;Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x7279;&#x6027;, &#x5305;&#x62EC;&#x5982;&#x4F55; &#x4E0B;&#x8F09;, &#x683C;&#x5F0F;&#x5316;, &#x69CB;&#x5EFA;, &#x6E2C;&#x8A66; &#x548C; &#x5B89;&#x88DD; Go &#x7A0B;&#x5E8F;.</p>
<p>Go&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x96C6;&#x95A4;&#x4E86;&#x4E00;&#x7E6B;&#x5217;&#x7684;&#x529F;&#x80FD;&#x5230;&#x4E00;&#x500B;&#x547D;&#x4EE4;&#x96C6;. &#x5B83;&#x53EF;&#x4EE5;&#x770B;&#x4F5C;&#x662F;&#x4E00;&#x500B;&#x5305;&#x7BA1;&#x7406;&#x5668;(&#x985E;&#x4F3C;&#x65BC;Linux&#x4E2D;&#x7684;apt&#x548C;rpm&#x5DE5;&#x5177;), &#x7528;&#x65BC;&#x5305;&#x7684;&#x67FB;&#x8A62;, &#x8A08;&#x7B97;&#x7684;&#x5305;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;, &#x5F9E;&#x9060;&#x7A0B;&#x7248;&#x672C;&#x63A7;&#x88FD;&#x7E6B;&#x7D71;&#x548C;&#x4E0B;&#x8F09;&#x5B83;&#x5011;&#x7B49;&#x4EFB;&#x52D9;. &#x5B83;&#x4E5F;&#x662F;&#x4E00;&#x500B;&#x69CB;&#x5EFA;&#x7E6B;&#x7D71;, &#x8A08;&#x7B97;&#x6587;&#x4EF6;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;, &#x7136;&#x5F8C;&#x8ABF;&#x7528;&#x7DE8;&#x8B6F;&#x5668;, &#x6ED9;&#x7DE8;&#x5668; &#x548C; &#x9023;&#x63A5;&#x5668; &#x69CB;&#x5EFA;&#x7A0B;&#x5E8F;, &#x96D6;&#x7136;&#x5B83;&#x6545;&#x610F;&#x88AB;&#x8A2D;&#x8A08;&#x6210;&#x6C92;&#x6709;&#x6A19;&#x6E96;&#x7684;make&#x547D;&#x4EE4;&#x90A3;&#x9EBC;&#x5FA9;&#x96DC;. &#x5B83;&#x4E5F;&#x662F;&#x4E00;&#x500B;&#x6E2C;&#x8A66;&#x9A45;&#x52D5;&#x7A0B;&#x5E8F;, &#x6211;&#x5011;&#x5728;&#x7B2C;11&#x7AE0;&#x8A0E;&#x8AD6;&#x6E2C;&#x8A66;&#x8A71;&#x984C;.</p>
<p>Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x547D;&#x4EE4;&#x6709;&#x7740;&#x985E;&#x4F3C;&quot;&#x745E;&#x58EB;&#x8ECD;&#x5200;&quot;&#x7684;&#x98A8;&#x683C;, &#x5E36;&#x7740;&#x4E00;&#x6253;&#x5B50;&#x7684;&#x5B50;&#x547D;&#x4EE4;, &#x6709;&#x4E00;&#x4E9B;&#x6211;&#x5011;&#x7D93;&#x5E38;&#x7528;&#x5230;, &#x4F8B;&#x5982; get, run, build, &#x548C; fmt &#x7B49;. &#x4F60;&#x53EF;&#x4EE5;&#x904B;&#x884C; <code>go help</code> &#x547D;&#x4EE4;&#x67FB;&#x770B;&#x5167;&#x7F6E;&#x7684;&#x6EAB;&#x5EA6;, &#x70BA;&#x4E86;&#x67FB;&#x8A62;&#x65B9;&#x4FBF;, &#x6211;&#x5011;&#x5217;&#x9F63;&#x4E86;&#x6700;&#x5E38;&#x7528;&#x7684;&#x547D;&#x4EE4;:</p>
<p>Go&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x96C6;&#x5408;&#x4E86;&#x4E00;&#x7E6B;&#x5217;&#x7684;&#x529F;&#x80FD;&#x5230;&#x4E00;&#x500B;&#x547D;&#x4EE4;&#x96C6;. &#x5B83;&#x53EF;&#x4EE5;&#x770B;&#x4F5C;&#x662F;&#x4E00;&#x500B;&#x5305;&#x7BA1;&#x7406;&#x5668;(&#x985E;&#x4F3C;&#x65BC;Linux&#x4E2D;&#x7684;apt&#x548C;rpm&#x5DE5;&#x5177;), &#x7528;&#x65BC;&#x5305;&#x7684;&#x67FB;&#x8A62;, &#x8A08;&#x7B97;&#x7684;&#x5305;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;, &#x5F9E;&#x9060;&#x7A0B;&#x7248;&#x672C;&#x63A7;&#x88FD;&#x7E6B;&#x7D71;&#x548C;&#x4E0B;&#x8F09;&#x5B83;&#x5011;&#x7B49;&#x4EFB;&#x52D9;. &#x5B83;&#x4E5F;&#x662F;&#x4E00;&#x500B;&#x69CB;&#x5EFA;&#x7E6B;&#x7D71;, &#x8A08;&#x7B97;&#x6587;&#x4EF6;&#x7684;&#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;, &#x7136;&#x5F8C;&#x8ABF;&#x7528;&#x7DE8;&#x8B6F;&#x5668;, &#x6ED9;&#x7DE8;&#x5668; &#x548C; &#x9023;&#x63A5;&#x5668; &#x69CB;&#x5EFA;&#x7A0B;&#x5E8F;, &#x96D6;&#x7136;&#x5B83;&#x6545;&#x610F;&#x88AB;&#x8A2D;&#x8A08;&#x6210;&#x6C92;&#x6709;&#x6A19;&#x6E96;&#x7684;make&#x547D;&#x4EE4;&#x90A3;&#x9EBD;&#x8907;&#x96DC;. &#x5B83;&#x4E5F;&#x662F;&#x4E00;&#x500B;&#x6E2C;&#x8A66;&#x9A45;&#x52D5;&#x7A0B;&#x5E8F;, &#x6211;&#x5011;&#x5728;&#x7B2C;11&#x7AE0;&#x8A0E;&#x8AD6;&#x6E2C;&#x8A66;&#x8A71;&#x984C;.</p>
<p>Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x547D;&#x4EE4;&#x6709;&#x7740;&#x985E;&#x4F3C;&quot;&#x745E;&#x58EB;&#x8ECD;&#x5200;&quot;&#x7684;&#x98A8;&#x683C;, &#x5E36;&#x7740;&#x4E00;&#x6253;&#x5B50;&#x7684;&#x5B50;&#x547D;&#x4EE4;, &#x6709;&#x4E00;&#x4E9B;&#x6211;&#x5011;&#x7D93;&#x5E38;&#x7528;&#x5230;, &#x4F8B;&#x5982; get, run, build, &#x548C; fmt &#x7B49;. &#x4F60;&#x53EF;&#x4EE5;&#x904B;&#x884C; <code>go help</code> &#x547D;&#x4EE4;&#x67FB;&#x770B;&#x5167;&#x7F6E;&#x7684;&#x6EAB;&#x5EA6;, &#x7232;&#x4E86;&#x67FB;&#x8A62;&#x65B9;&#x4FBF;, &#x6211;&#x5011;&#x5217;&#x9F63;&#x4E86;&#x6700;&#x5E38;&#x7528;&#x7684;&#x547D;&#x4EE4;:</p>
<pre><code>$ go
...
build compile packages and dependencies
@@ -2080,12 +2044,12 @@
Use &quot;go help [command]&quot; for more information about a command.
...
</code></pre><p>&#x70BA;&#x4E86;&#x9054;&#x5230;&#x96F6;&#x914D;&#x7F6E;&#x7684;&#x76EE;&#x6A19;, Go&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x5F88;&#x591A;&#x5730;&#x65B9;&#x90FD;&#x4F9D;&#x8CF4;&#x5404;&#x7A2E;&#x7D04;&#x5B9A;. &#x4F8B;&#x5982;, &#x7D66;&#x5B9A;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x540D;&#x7A31;, Go&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5C0D;&#x61C9;&#x7684;&#x5305;, &#x56E0;&#x70BA;&#x6BCF;&#x500B;&#x76EE;&#x5F54;&#x96BB;&#x5305;&#x542B;&#x4E86;&#x55AE;&#x4E00;&#x7684;&#x5305;, &#x4F75;&#x4E14;&#x5230;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x548C;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x76EE;&#x5F54;&#x7D50;&#x69CB;&#x662F;&#x5C0D;&#x61C9;&#x7684;. &#x7D66;&#x5B9A;&#x4E00;&#x500B;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, Go&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x5F54;&#x4E2D;&#x4FDD;&#x5B58;&#x5C0D;&#x8C61;&#x7684;&#x6587;&#x4EF6;. &#x5B83;&#x9084;&#x53EF;&#x4EE5;&#x9AEE;&#x73FE;&#x5B58;&#x5132;&#x4EE3;&#x78BC;&#x5009;&#x5EAB;&#x7684;&#x9060;&#x7A0B;&#x670D;&#x52D9;&#x5668;&#x7684;URL.</p>
</code></pre><p>&#x7232;&#x4E86;&#x9054;&#x5230;&#x96F6;&#x914D;&#x7F6E;&#x7684;&#x76EE;&#x6A19;, Go&#x7684;&#x5DE5;&#x5177;&#x7BB1;&#x5F88;&#x591A;&#x5730;&#x65B9;&#x90FD;&#x4F9D;&#x8CF4;&#x5404;&#x7A2E;&#x7D04;&#x5B9A;. &#x4F8B;&#x5982;, &#x7D66;&#x5B9A;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x540D;&#x7A31;, Go&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5C0D;&#x61C9;&#x7684;&#x5305;, &#x56E0;&#x7232;&#x6BCF;&#x500B;&#x76EE;&#x9332;&#x96BB;&#x5305;&#x542B;&#x4E86;&#x55AE;&#x4E00;&#x7684;&#x5305;, &#x4F75;&#x4E14;&#x5230;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x548C;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x76EE;&#x9332;&#x7D50;&#x69CB;&#x662F;&#x5C0D;&#x61C9;&#x7684;. &#x7D66;&#x5B9A;&#x4E00;&#x500B;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, Go&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x9332;&#x4E2D;&#x4FDD;&#x5B58;&#x5C0D;&#x8C61;&#x7684;&#x6587;&#x4EF6;. &#x5B83;&#x9084;&#x53EF;&#x4EE5;&#x767C;&#x73FE;&#x5B58;&#x5132;&#x4EE3;&#x78BC;&#x5009;&#x5EAB;&#x7684;&#x9060;&#x7A0B;&#x670D;&#x52D9;&#x5668;&#x7684;URL.</p>
<h3 id="1071-&#x5DE5;&#x4F5C;&#x5340;&#x7D50;&#x69CB;">10.7.1. &#x5DE5;&#x4F5C;&#x5340;&#x7D50;&#x69CB;</h3>
<p>&#x5C0D;&#x65BC;&#x5927;&#x591A;&#x6578;&#x7684;Go&#x7528;&#x6236;, &#x96BB;&#x9700;&#x8981;&#x914D;&#x7F6E;&#x4E00;&#x500B;&#x540D;&#x53EB;GOPATH&#x7684;&#x74B0;&#x5883;&#x8B8A;&#x91CF;, &#x7528;&#x4F86;&#x6307;&#x5B9A;&#x6839;&#x5DE5;&#x4F5C;&#x76EE;&#x5F54;&#x537D;&#x53EF;. &#x7576;&#x9700;&#x8981;&#x5207;&#x63DB;&#x5230;&#x4E0D;&#x8855;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x6642;&#x5019;, &#x96BB;&#x8981;&#x66F4;&#x65B0;GOPATH&#x5C31;&#x53EF;&#x4EE5;&#x4E86;. &#x4F8B;&#x5982;, &#x6211;&#x5011;&#x5728;&#x7DE8;&#x5BEB;&#x672C;&#x66F8;&#x6642;, &#x5C07;GOPATH&#x8A2D;&#x7F6E;&#x70BA; <code>$HOME/gobook</code>:</p>
<p>&#x5C0D;&#x65BC;&#x5927;&#x591A;&#x6578;&#x7684;Go&#x7528;&#x6236;, &#x96BB;&#x9700;&#x8981;&#x914D;&#x7F6E;&#x4E00;&#x500B;&#x540D;&#x53EB;GOPATH&#x7684;&#x74B0;&#x5883;&#x8B8A;&#x91CF;, &#x7528;&#x4F86;&#x6307;&#x5B9A;&#x6839;&#x5DE5;&#x4F5C;&#x76EE;&#x9332;&#x537D;&#x53EF;. &#x7576;&#x9700;&#x8981;&#x5207;&#x63DB;&#x5230;&#x4E0D;&#x540C;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x6642;&#x5019;, &#x96BB;&#x8981;&#x66F4;&#x65B0;GOPATH&#x5C31;&#x53EF;&#x4EE5;&#x4E86;. &#x4F8B;&#x5982;, &#x6211;&#x5011;&#x5728;&#x7DE8;&#x5BEB;&#x672C;&#x66F8;&#x6642;, &#x5C07;GOPATH&#x8A2D;&#x7F6E;&#x7232; <code>$HOME/gobook</code>:</p>
<pre><code>$ export GOPATH=$HOME/gobook
$ go get gopl.io/...
</code></pre><p>&#x7576;&#x4F60;&#x7528;&#x524D;&#x9EAB;&#x4ECB;&#x7D39;&#x7684;&#x547D;&#x4EE4;&#x4E0B;&#x8F09;&#x672C;&#x66F8;&#x5168;&#x90E8;&#x7684;&#x7A0B;&#x5E8F;&#x4E4B;&#x5F8C;, &#x4F60;&#x7684;&#x7576;&#x524D;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x76EE;&#x5F54;&#x7D50;&#x69CB;&#x662F;&#x9019;&#x6A23;&#x7684;:</p>
</code></pre><p>&#x7576;&#x4F60;&#x7528;&#x524D;&#x9762;&#x4ECB;&#x7D39;&#x7684;&#x547D;&#x4EE4;&#x4E0B;&#x8F09;&#x672C;&#x66F8;&#x5168;&#x90E8;&#x7684;&#x7A0B;&#x5E8F;&#x4E4B;&#x5F8C;, &#x4F60;&#x7684;&#x7576;&#x524D;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x76EE;&#x9332;&#x7D50;&#x69CB;&#x662F;&#x9019;&#x6A23;&#x7684;:</p>
<pre><code>GOPATH/
src/
gopl.io/
@@ -2108,8 +2072,8 @@ $ go get gopl.io/...
pkg/
darwin_amd64/
...
</code></pre><p>GOPATH&#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x5F54;&#x6709;&#x4E09;&#x500B;&#x5B50;&#x76EE;&#x5F54;. &#x5176;&#x4E2D; src &#x5B50;&#x76EE;&#x5F54;&#x7528;&#x65BC;&#x5B58;&#x5132;&#x6E90;&#x4EE3;&#x78BC;. &#x6BCF;&#x500B;&#x5305;&#x4FDD;&#x5B58;&#x5728;$GOPATH/src&#x7684;&#x76F8;&#x5C0D;&#x8DEF;&#x5F91;&#x70BA;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x7684;&#x5B50;&#x76EE;&#x5F54;&#x4E2D;, &#x4F8B;&#x5982; gopl.io/ch1/helloworld &#x76F8;&#x5C0D;&#x8DEF;&#x5F91;. &#x6211;&#x5011;&#x770B;&#x5230;, &#x4E00;&#x500B;GOPATH&#x5DE5;&#x4F5C;&#x5340;&#x7684;src&#x76EE;&#x5F54;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x7248;&#x672C;&#x63A7;&#x88FD;, &#x4F8B;&#x5982; gopl.io &#x6216; golang.org. &#x5176;&#x4E2D; pkg &#x5B50;&#x76EE;&#x5F54;&#x7528;&#x65BC;&#x4FDD;&#x5B58;&#x7DE8;&#x8B6F;&#x5F8C;&#x7684;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;, bin &#x5B50;&#x76EE;&#x5F54;&#x7528;&#x65BC;&#x4FDD;&#x5B58;&#x7DE8;&#x8B6F;&#x5F8C;&#x7684;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;, &#x4F8B;&#x5982; helloworld &#x7A0B;&#x5E8F;.</p>
<p>&#x7B2C;&#x4E8C;&#x500B;&#x74B0;&#x5883;&#x8B8A;&#x91CF; GOROOT &#x7528;&#x4F86;&#x6307;&#x5B9A;Go&#x7684;&#x5B89;&#x88DD;&#x76EE;&#x5F54;, &#x9084;&#x6709;&#x5B83;&#x81EA;&#x5E36;&#x7684;&#x6A19;&#x6E96;&#x5EAB;&#x5305;&#x7684;&#x4F4D;&#x7F6E;. GOROOT &#x7684;&#x76EE;&#x5F54;&#x7D50;&#x69CB;&#x548C; GOPATH &#x985E;&#x4F3C;, &#x56E0;&#x6B64;&#x5B58;&#x653E; fmt &#x5305;&#x7684;&#x6E90;&#x4EE3;&#x78BC;&#x76EE;&#x5F54;&#x70BA; $GOROOT/src/fmt. &#x7528;&#x6236;&#x4E00;&#x822C;&#x4E0D;&#x9700;&#x8981;&#x8A2D;&#x7F6E; GOROOT, &#x9ED8;&#x8A8D;&#x60C5;&#x6CC1;&#x4E0B;, Go&#x5DE5;&#x5177;&#x6703;&#x8A2D;&#x7F6E;&#x70BA;&#x5B89;&#x88DD;&#x7684;&#x4F4D;&#x7F6E;.</p>
</code></pre><p>GOPATH&#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x9332;&#x6709;&#x4E09;&#x500B;&#x5B50;&#x76EE;&#x9332;. &#x5176;&#x4E2D; src &#x5B50;&#x76EE;&#x9332;&#x7528;&#x65BC;&#x5B58;&#x5132;&#x6E90;&#x4EE3;&#x78BC;. &#x6BCF;&#x500B;&#x5305;&#x4FDD;&#x5B58;&#x5728;$GOPATH/src&#x7684;&#x76F8;&#x5C0D;&#x8DEF;&#x5F91;&#x7232;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x7684;&#x5B50;&#x76EE;&#x9332;&#x4E2D;, &#x4F8B;&#x5982; gopl.io/ch1/helloworld &#x76F8;&#x5C0D;&#x8DEF;&#x5F91;. &#x6211;&#x5011;&#x770B;&#x5230;, &#x4E00;&#x500B;GOPATH&#x5DE5;&#x4F5C;&#x5340;&#x7684;src&#x76EE;&#x9332;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x7248;&#x672C;&#x63A7;&#x88FD;, &#x4F8B;&#x5982; gopl.io &#x6216; golang.org. &#x5176;&#x4E2D; pkg &#x5B50;&#x76EE;&#x9332;&#x7528;&#x65BC;&#x4FDD;&#x5B58;&#x7DE8;&#x8B6F;&#x5F8C;&#x7684;&#x5305;&#x7684;&#x76EE;&#x6A19;&#x6587;&#x4EF6;, bin &#x5B50;&#x76EE;&#x9332;&#x7528;&#x65BC;&#x4FDD;&#x5B58;&#x7DE8;&#x8B6F;&#x5F8C;&#x7684;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;, &#x4F8B;&#x5982; helloworld &#x7A0B;&#x5E8F;.</p>
<p>&#x7B2C;&#x4E8C;&#x500B;&#x74B0;&#x5883;&#x8B8A;&#x91CF; GOROOT &#x7528;&#x4F86;&#x6307;&#x5B9A;Go&#x7684;&#x5B89;&#x88DD;&#x76EE;&#x9332;, &#x9084;&#x6709;&#x5B83;&#x81EA;&#x5E36;&#x7684;&#x6A19;&#x6E96;&#x5EAB;&#x5305;&#x7684;&#x4F4D;&#x7F6E;. GOROOT &#x7684;&#x76EE;&#x9332;&#x7D50;&#x69CB;&#x548C; GOPATH &#x985E;&#x4F3C;, &#x56E0;&#x6B64;&#x5B58;&#x653E; fmt &#x5305;&#x7684;&#x6E90;&#x4EE3;&#x78BC;&#x76EE;&#x9332;&#x7232; $GOROOT/src/fmt. &#x7528;&#x6236;&#x4E00;&#x822C;&#x4E0D;&#x9700;&#x8981;&#x8A2D;&#x7F6E; GOROOT, &#x9ED8;&#x8A8D;&#x60C5;&#x6CC1;&#x4E0B;, Go&#x5DE5;&#x5177;&#x6703;&#x8A2D;&#x7F6E;&#x7232;&#x5B89;&#x88DD;&#x7684;&#x4F4D;&#x7F6E;.</p>
<p>&#x5176;&#x4E2D; <code>go env</code> &#x547D;&#x4EE4;&#x7528;&#x65BC;&#x67FB;&#x770B;&#x5DE5;&#x5177;&#x6D89;&#x53CA;&#x7684;&#x6240;&#x6709;&#x74B0;&#x5883;&#x8B8A;&#x91CF;&#x7684;&#x503C;, &#x5305;&#x62EC;&#x672A;&#x8A2D;&#x7F6E;&#x74B0;&#x5883;&#x8B8A;&#x91CF;&#x7684;&#x9ED8;&#x8A8D;&#x503C;. GOOS &#x7528;&#x65BC;&#x6307;&#x5B9A;&#x76EE;&#x6A19;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;(&#x4F8B;&#x5982; android, linux, darwin, &#x6216; windows), GOARCH &#x7528;&#x65BC;&#x6307;&#x5B9A;&#x8655;&#x7406;&#x5668;&#x7684;&#x985E;&#x578B;, &#x4F8B;&#x5982; amd64, 386, &#x6216; arm. &#x96D6;&#x7136; GOPATH &#x662F;&#x552F;&#x4E00;&#x5FC5;&#x9700;&#x8981;&#x8A2D;&#x7F6E;&#x7684;, &#x4F46;&#x662F;&#x5176;&#x5B83;&#x7684;&#x4E5F;&#x6709;&#x5076;&#x723E;&#x7528;&#x5230;.</p>
<pre><code>$ go env
GOPATH=&quot;/home/gopher/gobook&quot;
@@ -2119,31 +2083,31 @@ GOOS=&quot;darwin&quot;
...
</code></pre><h3 id="1072-&#x4E0B;&#x8F09;&#x5305;">10.7.2. &#x4E0B;&#x8F09;&#x5305;</h3>
<p>&#x4F7F;&#x7528;Go&#x5DE5;&#x5177;, &#x4E0D;&#x50C5;&#x53EF;&#x4EE5;&#x6839;&#x64DA;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x627E;&#x5230;&#x672C;&#x5730;&#x5DE5;&#x4F5C;&#x5340;&#x7684;&#x5305;, &#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x5F9E;&#x4E92;&#x806F;&#x7DB2;&#x4E0A;&#x627E;&#x5230;&#x548C;&#x66F4;&#x65B0;&#x5305;.</p>
<p>&#x4F7F;&#x7528;&#x547D;&#x4EE4; <code>go get</code> &#x53EF;&#x4EE5;&#x4E0B;&#x8F09;&#x4E00;&#x500B;&#x55AE;&#x4E00;&#x7684;&#x5305;&#x6216;&#x8005;&#x7528; <code>...</code> &#x4E0B;&#x8F09;&#x6574;&#x500B;&#x5B50;&#x76EE;&#x5F54;&#x88CF;&#x9EAB;&#x7684;&#x6BCF;&#x500B;&#x5305;. Go&#x5DE5;&#x5177;&#x8855;&#x6642;&#x8A08;&#x7B97;&#x4F75;&#x4E0B;&#x8F09;&#x6240;&#x4F9D;&#x8CF4;&#x7684;&#x6BCF;&#x500B;&#x5305;, &#x9019;&#x4E5F;&#x662F;&#x524D;&#x4E00;&#x500B;&#x4F8B;&#x5B50;&#x4E2D; golang.org/x/net/html &#x81EA;&#x52D5;&#x9F63;&#x73FE;&#x5728;&#x672C;&#x5730;&#x5DE5;&#x4F5C;&#x5340;&#x76EE;&#x5F54;&#x7684;&#x539F;&#x56E0;.</p>
<p>&#x4F7F;&#x7528;&#x547D;&#x4EE4; <code>go get</code> &#x53EF;&#x4EE5;&#x4E0B;&#x8F09;&#x4E00;&#x500B;&#x55AE;&#x4E00;&#x7684;&#x5305;&#x6216;&#x8005;&#x7528; <code>...</code> &#x4E0B;&#x8F09;&#x6574;&#x500B;&#x5B50;&#x76EE;&#x9332;&#x91CC;&#x9762;&#x7684;&#x6BCF;&#x500B;&#x5305;. Go&#x5DE5;&#x5177;&#x540C;&#x6642;&#x8A08;&#x7B97;&#x4F75;&#x4E0B;&#x8F09;&#x6240;&#x4F9D;&#x8CF4;&#x7684;&#x6BCF;&#x500B;&#x5305;, &#x9019;&#x4E5F;&#x662F;&#x524D;&#x4E00;&#x500B;&#x4F8B;&#x5B50;&#x4E2D; golang.org/x/net/html &#x81EA;&#x52D5;&#x9F63;&#x73FE;&#x5728;&#x672C;&#x5730;&#x5DE5;&#x4F5C;&#x5340;&#x76EE;&#x9332;&#x7684;&#x539F;&#x56E0;.</p>
<p>&#x4E00;&#x65E6; <code>go get</code> &#x547D;&#x4EE4;&#x4E0B;&#x8F09;&#x4E86;&#x5305;, &#x7136;&#x5F8C;&#x5C31;&#x662F;&#x5B89;&#x88DD;&#x5305;&#x6216;&#x5305;&#x5C0D;&#x61C9;&#x7684;&#x547D;&#x4EE4;. &#x6211;&#x5011;&#x5C07;&#x5728;&#x4E0B;&#x4E00;&#x7BC0;&#x518D;&#x95DC;&#x8A3B;&#x5B83;&#x7684;&#x7D30;&#x7BC0;, &#x73FE;&#x5728;&#x96BB;&#x662F;&#x5C55;&#x793A;&#x4E0B;&#x6574;&#x500B;&#x904E;&#x7A0B;&#x662F;&#x5982;&#x4F55;&#x7684;&#x7C21;&#x55AE;. &#x7B2C;&#x4E00;&#x500B;&#x547D;&#x4EE4;&#x662F;&#x7A6B;&#x53D6; golint &#x5DE5;&#x5177;, &#x7528;&#x65BC;&#x6AA2;&#x6E2C;Go&#x6E90;&#x4EE3;&#x78BC;&#x7684;&#x7DE8;&#x7A0B;&#x98A8;&#x683C;&#x662F;&#x5426;&#x6709;&#x554F;&#x984C;. &#x7B2C;&#x4E8C;&#x500B;&#x547D;&#x4EE4;&#x662F;&#x7528; golint &#x5C0D; 2.6.2&#x7BC0;&#x7684; gopl.io/ch2/popcount &#x5305;&#x4EE3;&#x78BC;&#x9032;&#x884C;&#x7DE8;&#x78BC;&#x98A8;&#x683C;&#x6AA2;&#x67FB;. &#x5B83;&#x53CB;&#x597D;&#x5730;&#x5831;&#x544A;&#x4E86;&#x5FD8;&#x8A18;&#x4E86;&#x5305;&#x7684;&#x6587;&#x6A94;:</p>
<pre><code>$ go get github.com/golang/lint/golint
$ $GOPATH/bin/golint gopl.io/ch2/popcount
src/gopl.io/ch2/popcount/main.go:1:1:
package comment should be of the form &quot;Package popcount ...&quot;
</code></pre><p><code>go get</code> &#x547D;&#x4EE4;&#x652F;&#x6301;&#x7576;&#x524D;&#x6D41;&#x884C;&#x7684;&#x8A17;&#x7BA1;&#x7DB2;&#x7AD9; GitHub, Bitbucket, &#x548C; Launchpad, &#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5F9E;&#x5B83;&#x5011;&#x7684;&#x7248;&#x672C;&#x63A7;&#x88FD;&#x7E6B;&#x7D71;&#x8ACB;&#x6C42;&#x4EE3;&#x78BC;. &#x5C0D;&#x65BC;&#x5176;&#x4ED6;&#x7684;&#x7DB2;&#x7AD9;, &#x4F60;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x6307;&#x5B9A;&#x7248;&#x672C;&#x63A7;&#x88FD;&#x7E6B;&#x7D71;&#x7684;&#x5177;&#x9AD4;&#x8DEF;&#x5F91;&#x548C;&#x5354;&#x8B70;, &#x4F8B;&#x5982; Git &#x6216; Mercurial. &#x904B;&#x884C; <code>go help importpath</code> &#x7A6B;&#x53D6;&#x66F4;&#x65B0;&#x7684;&#x4FE1;&#x606F;.</p>
<p><code>go get</code> &#x7A6B;&#x53D6;&#x7684;&#x4EE3;&#x78BC;&#x662F;&#x771E;&#x5BE6;&#x7684;&#x672C;&#x5730;&#x5B58;&#x5132;&#x5009;&#x5EAB;, &#x4E0D;&#x50C5;&#x50C5;&#x96BB;&#x662F;&#x5FA9;&#x88FD;&#x6587;&#x4EF6;, &#x56E0;&#x6B64;&#x4F60;&#x4F9D;&#x7136;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x6BD4;&#x8F03;&#x672C;&#x5730;&#x4EE3;&#x78BC;&#x7684;&#x8B8A;&#x66F4;, &#x6216;&#x8005;&#x5207;&#x63DB;&#x5230;&#x5176;&#x4ED6;&#x7684;&#x7248;&#x672C;. &#x4F8B;&#x5982; golang.org/x/net &#x76EE;&#x5F54;&#x5C0D;&#x61C9;&#x4E00;&#x500B; Git &#x5009;&#x5EAB;:</p>
<p><code>go get</code> &#x7A6B;&#x53D6;&#x7684;&#x4EE3;&#x78BC;&#x662F;&#x771E;&#x5BE6;&#x7684;&#x672C;&#x5730;&#x5B58;&#x5132;&#x5009;&#x5EAB;, &#x4E0D;&#x50C5;&#x50C5;&#x96BB;&#x662F;&#x8907;&#x88FD;&#x6587;&#x4EF6;, &#x56E0;&#x6B64;&#x4F60;&#x4F9D;&#x7136;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x6BD4;&#x8F03;&#x672C;&#x5730;&#x4EE3;&#x78BC;&#x7684;&#x8B8A;&#x66F4;, &#x6216;&#x8005;&#x5207;&#x63DB;&#x5230;&#x5176;&#x4ED6;&#x7684;&#x7248;&#x672C;. &#x4F8B;&#x5982; golang.org/x/net &#x76EE;&#x9332;&#x5C0D;&#x61C9;&#x4E00;&#x500B; Git &#x5009;&#x5EAB;:</p>
<pre><code>$ cd $GOPATH/src/golang.org/x/net
$ git remote -v
origin https://go.googlesource.com/net (fetch)
origin https://go.googlesource.com/net (push)
</code></pre><p>&#x9700;&#x8981;&#x8A3B;&#x610F;&#x7684;&#x662F;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x542B;&#x6709;&#x7684;&#x7DB2;&#x7AD9;&#x57DF;&#x540D;&#x548C;&#x672C;&#x5730;Git&#x5009;&#x5EAB;&#x9060;&#x7A0B;&#x7684;Git&#x670D;&#x52D9;&#x5730;&#x5740;&#x4F75;&#x4E0D;&#x76F8;&#x8855;, &#x771E;&#x5BE6;&#x7684;Git&#x5730;&#x5740;&#x662F; go.googlesource.com. &#x9019;&#x5176;&#x5BE6;&#x662F;Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x4E00;&#x500B;&#x7279;&#x6027;, &#x53EF;&#x4EE5;&#x8B93;&#x5305;&#x7528;&#x4E00;&#x500B;&#x81EA;&#x5B9A;&#x7FA9;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x4F46;&#x662F;&#x771E;&#x5BE6;&#x7684;&#x4EE3;&#x78BC;&#x537B;&#x662F;&#x7531;&#x66F4;&#x901A;&#x7528;&#x7684;&#x670D;&#x52D9;&#x63D0;&#x4F9B;, &#x4F8B;&#x5982; googlesource.com &#x6216; github.com. &#x9801;&#x9EAB; <a href="https://golang.org/x/net/html" target="_blank">https://golang.org/x/net/html</a> &#x5305;&#x542B;&#x4E86;&#x5982;&#x4E0B;&#x7684;&#x5143;&#x6578;&#x64DA;, &#x544A;&#x8A34; Go &#x5DE5;&#x5177;Git&#x5009;&#x5EAB;&#x7684;&#x771E;&#x5BE6;&#x8A17;&#x7BA1;&#x5730;&#x5740;:</p>
</code></pre><p>&#x9700;&#x8981;&#x8A3B;&#x610F;&#x7684;&#x662F;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x542B;&#x6709;&#x7684;&#x7DB2;&#x7AD9;&#x57DF;&#x540D;&#x548C;&#x672C;&#x5730;Git&#x5009;&#x5EAB;&#x9060;&#x7A0B;&#x7684;Git&#x670D;&#x52D9;&#x5730;&#x5740;&#x4F75;&#x4E0D;&#x76F8;&#x540C;, &#x771E;&#x5BE6;&#x7684;Git&#x5730;&#x5740;&#x662F; go.googlesource.com. &#x9019;&#x5176;&#x5BE6;&#x662F;Go&#x5DE5;&#x5177;&#x7BB1;&#x7684;&#x4E00;&#x500B;&#x7279;&#x6027;, &#x53EF;&#x4EE5;&#x8B93;&#x5305;&#x7528;&#x4E00;&#x500B;&#x81EA;&#x5B9A;&#x7FA9;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x4F46;&#x662F;&#x771E;&#x5BE6;&#x7684;&#x4EE3;&#x78BC;&#x537B;&#x662F;&#x7531;&#x66F4;&#x901A;&#x7528;&#x7684;&#x670D;&#x52D9;&#x63D0;&#x4F9B;, &#x4F8B;&#x5982; googlesource.com &#x6216; github.com. &#x9801;&#x9762; <a href="https://golang.org/x/net/html" target="_blank">https://golang.org/x/net/html</a> &#x5305;&#x542B;&#x4E86;&#x5982;&#x4E0B;&#x7684;&#x5143;&#x6578;&#x64DA;, &#x544A;&#x8A34; Go &#x5DE5;&#x5177;Git&#x5009;&#x5EAB;&#x7684;&#x771E;&#x5BE6;&#x8A17;&#x7BA1;&#x5730;&#x5740;:</p>
<pre><code>$ go build gopl.io/ch1/fetch
$ ./fetch https://golang.org/x/net/html | grep go-import
&lt;meta name=&quot;go-import&quot;
content=&quot;golang.org/x/net git https://go.googlesource.com/net&quot;&gt;
</code></pre><p>&#x5982;&#x679C;&#x6307;&#x5B9A; <code>-u</code> &#x547D;&#x4EE4;&#x884C;&#x6A19;&#x8A8C;&#x53C3;&#x6578;, <code>go get</code> &#x5C07;&#x78BA;&#x4FDD;&#x6240;&#x6709;&#x7684;&#x5305;&#x548C;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x7684;&#x7248;&#x672C;&#x90FD;&#x662F;&#x6700;&#x65B0;&#x7684;, &#x7136;&#x5F8C;&#x7DE8;&#x8B6F;&#x548C;&#x5B89;&#x88DD;&#x5B83;&#x5011;. &#x5982;&#x679C;&#x4E0D;&#x5305;&#x542B;&#x8A72;&#x6A19;&#x8A8C;&#x53C3;&#x6578;, &#x5982;&#x679C;&#x5305;&#x5DF2;&#x7D93;&#x5728;&#x672C;&#x5730;&#x5B58;&#x5728;, &#x90A3;&#x9EBC;&#x5C07;&#x4E0D;&#x6703;&#x88AB;&#x66F4;&#x65B0;.</p>
<p><code>go get -u</code> &#x547D;&#x4EE4;&#x96BB;&#x662F;&#x7C21;&#x55AE;&#x5730;&#x4FDD;&#x8B49;&#x6BCF;&#x500B;&#x5305;&#x662F;&#x6700;&#x65B0;&#x7248;&#x672C;, &#x5982;&#x679C;&#x4F60;&#x662F;&#x7B2C;&#x4E00;&#x6B21;&#x4E0B;&#x8F09;&#x5247;&#x6BD4;&#x8F03;&#x5F88;&#x65B9;&#x4FBF;&#x7684;; &#x4F46;&#x662F;&#x5982;&#x679C;&#x662F;&#x9AEE;&#x4F48;&#x7A0B;&#x5E8F;&#x5247;&#x53EF;&#x80FD;&#x662F;&#x4E0D;&#x95A4;&#x9069;&#x7684;, &#x56E0;&#x70BA;&#x672C;&#x5730;&#x7A0B;&#x5E8F;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x5C0D;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x505A;&#x7CBE;&#x78BA;&#x7684;&#x7248;&#x672C;&#x4F9D;&#x8CF4;&#x7BA1;&#x7406;. &#x901A;&#x5E38;&#x7684;&#x89E3;&#x6C7A;&#x65B9;&#x6848;&#x662F;&#x4F7F;&#x7528; vendor &#x76EE;&#x5F54;&#x5B58;&#x5132;&#x56FA;&#x5B9A;&#x7248;&#x672C;&#x7684;&#x4EE3;&#x78BC;, &#x5C0D;&#x672C;&#x5730;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x7684;&#x7248;&#x672C;&#x66F4;&#x65B0;&#x4E5F;&#x662F;&#x8B39;&#x614E;&#x548C;&#x6301;&#x7E8C;&#x53EF;&#x63A7;&#x7684;. &#x5728; Go 1.5 &#x4E4B;&#x524D;, &#x4E00;&#x822C;&#x9700;&#x8981;&#x8129;&#x6539;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x6240;&#x4EE5;&#x5FA9;&#x88FD;&#x5F8C; golang.org/x/net/html &#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x53EF;&#x80FD;&#x6703;&#x8B8A;&#x70BA; gopl.io/vendor/golang.org/x/net/html. &#x6700;&#x65B0;&#x7684;Go&#x5DE5;&#x5177;&#x5DF2;&#x7D93;&#x652F;&#x6301; vendor &#x7279;&#x6027;, &#x4F46;&#x9650;&#x65BC;&#x7BC7;&#x5E45;&#x9019;&#x88CF;&#x4F75;&#x4E0D;&#x8A0E;&#x8AD6;&#x7D30;&#x7BC0;. &#x4E0D;&#x904E;&#x53EF;&#x4EE5;&#x901A;&#x904E; <code>go help gopath</code> &#x76EE;&#x5F54;&#x67FB;&#x770B; Vendor &#x76EE;&#x5F54;&#x7684;&#x5E6B;&#x52A9;.</p>
<p><strong>&#x7DF4;&#x7FD2; 10.3:</strong> &#x5F9E; <a href="http://gopl.io/ch1/helloworld?go-get=1" target="_blank">http://gopl.io/ch1/helloworld?go-get=1</a> &#x7A6B;&#x53D6;&#x5167;&#x5BB9;, &#x67FB;&#x770B;&#x672C;&#x66F8;&#x7684;&#x4EE3;&#x78BC;&#x7684;&#x771E;&#x5BE6;&#x8A17;&#x7BA1;&#x7684;&#x7DB2;&#x5740;(<code>go get</code>&#x8ACB;&#x6C42;HTML&#x9801;&#x9EAB;&#x6642;&#x5305;&#x542B;&#x4E86; <code>go-get</code> &#x53C3;&#x6578;, &#x4EE5;&#x5340;&#x5F46;&#x666E;&#x901A;&#x7684;&#x700F;&#x89BD;&#x5668;&#x8ACB;&#x6C42;.)</p>
</code></pre><p>&#x5982;&#x679C;&#x6307;&#x5B9A; <code>-u</code> &#x547D;&#x4EE4;&#x884C;&#x6A19;&#x8A8C;&#x53C3;&#x6578;, <code>go get</code> &#x5C07;&#x78BA;&#x4FDD;&#x6240;&#x6709;&#x7684;&#x5305;&#x548C;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x7684;&#x7248;&#x672C;&#x90FD;&#x662F;&#x6700;&#x65B0;&#x7684;, &#x7136;&#x5F8C;&#x7DE8;&#x8B6F;&#x548C;&#x5B89;&#x88DD;&#x5B83;&#x5011;. &#x5982;&#x679C;&#x4E0D;&#x5305;&#x542B;&#x8A72;&#x6A19;&#x8A8C;&#x53C3;&#x6578;, &#x5982;&#x679C;&#x5305;&#x5DF2;&#x7D93;&#x5728;&#x672C;&#x5730;&#x5B58;&#x5728;, &#x90A3;&#x9EBD;&#x5C07;&#x4E0D;&#x6703;&#x88AB;&#x66F4;&#x65B0;.</p>
<p><code>go get -u</code> &#x547D;&#x4EE4;&#x96BB;&#x662F;&#x7C21;&#x55AE;&#x5730;&#x4FDD;&#x8B49;&#x6BCF;&#x500B;&#x5305;&#x662F;&#x6700;&#x65B0;&#x7248;&#x672C;, &#x5982;&#x679C;&#x4F60;&#x662F;&#x7B2C;&#x4E00;&#x6B21;&#x4E0B;&#x8F09;&#x5247;&#x6BD4;&#x8F03;&#x5F88;&#x65B9;&#x4FBF;&#x7684;; &#x4F46;&#x662F;&#x5982;&#x679C;&#x662F;&#x767C;&#x5E03;&#x7A0B;&#x5E8F;&#x5247;&#x53EF;&#x80FD;&#x662F;&#x4E0D;&#x5408;&#x9069;&#x7684;, &#x56E0;&#x7232;&#x672C;&#x5730;&#x7A0B;&#x5E8F;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x5C0D;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x505A;&#x7CBE;&#x78BA;&#x7684;&#x7248;&#x672C;&#x4F9D;&#x8CF4;&#x7BA1;&#x7406;. &#x901A;&#x5E38;&#x7684;&#x89E3;&#x6C7A;&#x65B9;&#x6848;&#x662F;&#x4F7F;&#x7528; vendor &#x76EE;&#x9332;&#x5B58;&#x5132;&#x56FA;&#x5B9A;&#x7248;&#x672C;&#x7684;&#x4EE3;&#x78BC;, &#x5C0D;&#x672C;&#x5730;&#x4F9D;&#x8CF4;&#x7684;&#x5305;&#x7684;&#x7248;&#x672C;&#x66F4;&#x65B0;&#x4E5F;&#x662F;&#x8B39;&#x614E;&#x548C;&#x6301;&#x7E8C;&#x53EF;&#x63A7;&#x7684;. &#x5728; Go 1.5 &#x4E4B;&#x524D;, &#x4E00;&#x822C;&#x9700;&#x8981;&#x8129;&#x6539;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x6240;&#x4EE5;&#x8907;&#x88FD;&#x5F8C; golang.org/x/net/html &#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x53EF;&#x80FD;&#x6703;&#x8B8A;&#x7232; gopl.io/vendor/golang.org/x/net/html. &#x6700;&#x65B0;&#x7684;Go&#x5DE5;&#x5177;&#x5DF2;&#x7D93;&#x652F;&#x6301; vendor &#x7279;&#x6027;, &#x4F46;&#x9650;&#x65BC;&#x7BC7;&#x5E45;&#x9019;&#x91CC;&#x4F75;&#x4E0D;&#x8A0E;&#x8AD6;&#x7D30;&#x7BC0;. &#x4E0D;&#x904E;&#x53EF;&#x4EE5;&#x901A;&#x904E; <code>go help gopath</code> &#x76EE;&#x9332;&#x67FB;&#x770B; Vendor &#x76EE;&#x9332;&#x7684;&#x5E6B;&#x52A9;.</p>
<p><strong>&#x7DF4;&#x7FD2; 10.3:</strong> &#x5F9E; <a href="http://gopl.io/ch1/helloworld?go-get=1" target="_blank">http://gopl.io/ch1/helloworld?go-get=1</a> &#x7A6B;&#x53D6;&#x5167;&#x5BB9;, &#x67FB;&#x770B;&#x672C;&#x66F8;&#x7684;&#x4EE3;&#x78BC;&#x7684;&#x771E;&#x5BE6;&#x8A17;&#x7BA1;&#x7684;&#x7DB2;&#x5740;(<code>go get</code>&#x8ACB;&#x6C42;HTML&#x9801;&#x9762;&#x6642;&#x5305;&#x542B;&#x4E86; <code>go-get</code> &#x53C3;&#x6578;, &#x4EE5;&#x5340;&#x522B;&#x666E;&#x901A;&#x7684;&#x700F;&#x89BD;&#x5668;&#x8ACB;&#x6C42;.)</p>
<h3 id="1073-&#x69CB;&#x5EFA;&#x5305;">10.7.3. &#x69CB;&#x5EFA;&#x5305;</h3>
<p><code>go build</code> &#x547D;&#x4EE4;&#x7DE8;&#x8B6F;&#x53C3;&#x6578;&#x6307;&#x5B9A;&#x7684;&#x6BCF;&#x500B;&#x5305;. &#x5982;&#x679C;&#x5305;&#x662F;&#x4E00;&#x500B;&#x5EAB;, &#x5247;&#x5FFD;&#x7565;&#x8F38;&#x9F63;&#x7D50;&#x679C;; &#x9019;&#x53EF;&#x4EE5;&#x7528;&#x65BC;&#x6AA2;&#x6E2C;&#x5305;&#x7684;&#x53EF;&#x4EE5;&#x6B63;&#x78BA;&#x7DE8;&#x8B6F;&#x7684;.
&#x5982;&#x679C;&#x5305;&#x7684;&#x540D;&#x5B57;&#x662F; main, <code>go build</code> &#x5C07;&#x8ABF;&#x7528;&#x9023;&#x63A5;&#x5668;&#x5728;&#x7576;&#x524D;&#x76EE;&#x5F54;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;; &#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;&#x4F5C;&#x70BA;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x540D;&#x5B57;.</p>
<p>&#x56E0;&#x70BA;&#x6BCF;&#x500B;&#x76EE;&#x5F54;&#x96BB;&#x5305;&#x542B;&#x4E00;&#x500B;&#x5305;, &#x56E0;&#x6B64;&#x6BCF;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x5F8C;&#x8005;&#x53EB;Unix&#x672E;&#x8A9E;&#x4E2D;&#x7684;&#x547D;&#x4EE4;, &#x6703;&#x8981;&#x6C42;&#x653E;&#x5230;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x76EE;&#x5F54;. &#x9019;&#x4E9B;&#x76EE;&#x5F54;&#x6709;&#x6642;&#x5019;&#x6703;&#x653E;&#x5728;&#x540D;&#x53EB; cmd &#x76EE;&#x5F54;&#x7684;&#x5B50;&#x76EE;&#x5F54;&#x4E0B;&#x9EAB;, &#x4F8B;&#x5982;&#x7528;&#x65BC;&#x63D0;&#x4F9B;Go&#x6587;&#x6A94;&#x670D;&#x52D9;&#x7684; golang.org/x/tools/cmd/godoc &#x547D;&#x4EE4; (&#xA7;10.7.4).</p>
<p>&#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x7531;&#x5B83;&#x5011;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6307;&#x5B9A;, &#x5C31;&#x50CF;&#x524D;&#x9EAB;&#x770B;&#x5230;&#x7684;&#x90A3;&#x6A23;, &#x6216;&#x8005;&#x6709;&#x4E00;&#x500B;&#x76F8;&#x5C0D;&#x76EE;&#x5F54;&#x7684;&#x8DEF;&#x5F91;&#x77E5;&#x9053;, &#x5FC5;&#x9B1A;&#x4EE5; <code>.</code> &#x6216; <code>..</code> &#x958B;&#x982D;. &#x5982;&#x679C;&#x6C92;&#x6709;&#x6307;&#x5B9A;&#x53C3;&#x6578;, &#x90A3;&#x9EBC;&#x9ED8;&#x8A8D;&#x6307;&#x5B9A;&#x70BA;&#x7576;&#x524D;&#x7684;&#x76EE;&#x5F54;. &#x4E0B;&#x9EAB;&#x7684;&#x547D;&#x4EE4;&#x7528;&#x65BC;&#x69CB;&#x5EFA;&#x8855;&#x4E00;&#x500B;&#x5305;, &#x96D6;&#x7136;&#x5B83;&#x5011;&#x7684;&#x5BEB;&#x6CD5;&#x5404;&#x4E0D;&#x76F8;&#x8855;:</p>
&#x5982;&#x679C;&#x5305;&#x7684;&#x540D;&#x5B57;&#x662F; main, <code>go build</code> &#x5C07;&#x8ABF;&#x7528;&#x9023;&#x63A5;&#x5668;&#x5728;&#x7576;&#x524D;&#x76EE;&#x9332;&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;; &#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x7684;&#x6700;&#x5F8C;&#x4E00;&#x6BB5;&#x4F5C;&#x7232;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x540D;&#x5B57;.</p>
<p>&#x56E0;&#x7232;&#x6BCF;&#x500B;&#x76EE;&#x9332;&#x96BB;&#x5305;&#x542B;&#x4E00;&#x500B;&#x5305;, &#x56E0;&#x6B64;&#x6BCF;&#x500B;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x5F8C;&#x8005;&#x53EB;Unix&#x8853;&#x8A9E;&#x4E2D;&#x7684;&#x547D;&#x4EE4;, &#x6703;&#x8981;&#x6C42;&#x653E;&#x5230;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x76EE;&#x9332;. &#x9019;&#x4E9B;&#x76EE;&#x9332;&#x6709;&#x6642;&#x5019;&#x6703;&#x653E;&#x5728;&#x540D;&#x53EB; cmd &#x76EE;&#x9332;&#x7684;&#x5B50;&#x76EE;&#x9332;&#x4E0B;&#x9762;, &#x4F8B;&#x5982;&#x7528;&#x65BC;&#x63D0;&#x4F9B;Go&#x6587;&#x6A94;&#x670D;&#x52D9;&#x7684; golang.org/x/tools/cmd/godoc &#x547D;&#x4EE4; (&#xA7;10.7.4).</p>
<p>&#x6BCF;&#x500B;&#x5305;&#x53EF;&#x4EE5;&#x7531;&#x5B83;&#x5011;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6307;&#x5B9A;, &#x5C31;&#x50CF;&#x524D;&#x9762;&#x770B;&#x5230;&#x7684;&#x90A3;&#x6A23;, &#x6216;&#x8005;&#x6709;&#x4E00;&#x500B;&#x76F8;&#x5C0D;&#x76EE;&#x9332;&#x7684;&#x8DEF;&#x5F91;&#x77E5;&#x9053;, &#x5FC5;&#x9B1A;&#x4EE5; <code>.</code> &#x6216; <code>..</code> &#x958B;&#x982D;. &#x5982;&#x679C;&#x6C92;&#x6709;&#x6307;&#x5B9A;&#x53C3;&#x6578;, &#x90A3;&#x9EBD;&#x9ED8;&#x8A8D;&#x6307;&#x5B9A;&#x7232;&#x7576;&#x524D;&#x7684;&#x76EE;&#x9332;. &#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x7528;&#x65BC;&#x69CB;&#x5EFA;&#x540C;&#x4E00;&#x500B;&#x5305;, &#x96D6;&#x7136;&#x5B83;&#x5011;&#x7684;&#x5BEB;&#x6CD5;&#x5404;&#x4E0D;&#x76F8;&#x540C;:</p>
<pre><code>$ cd $GOPATH/src/gopl.io/ch1/helloworld
$ go build
</code></pre><p>&#x6216;&#x8005;:</p>
@@ -2156,7 +2120,7 @@ $ go build ./src/gopl.io/ch1/helloworld
<pre><code>$ cd $GOPATH
$ go build src/gopl.io/ch1/helloworld
Error: cannot find package &quot;src/gopl.io/ch1/helloworld&quot;.
</code></pre><p>&#x4E5F;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x5305;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x5217;&#x9336;, &#x4E00;&#x822C;&#x9019;&#x96BB;&#x7528;&#x65BC;&#x69CB;&#x5EFA;&#x4E00;&#x4E9B;&#x5C0F;&#x7A0B;&#x5E8F;&#x6216;&#x81E8;&#x6642;&#x6027;&#x7684;&#x5BE6;&#x9A57;. &#x5982;&#x679C;&#x662F;main&#x5305;, &#x5C07;&#x4EE5;&#x7B2C;&#x4E00;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x57FA;&#x790E;&#x6587;&#x4EF6;&#x540D;&#x4F5C;&#x70BA;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x540D;&#x5B57;.</p>
</code></pre><p>&#x4E5F;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x5305;&#x7684;&#x6E90;&#x6587;&#x4EF6;&#x5217;&#x8868;, &#x4E00;&#x822C;&#x9019;&#x96BB;&#x7528;&#x65BC;&#x69CB;&#x5EFA;&#x4E00;&#x4E9B;&#x5C0F;&#x7A0B;&#x5E8F;&#x6216;&#x81E8;&#x6642;&#x6027;&#x7684;&#x5BE6;&#x9A57;. &#x5982;&#x679C;&#x662F;main&#x5305;, &#x5C07;&#x4EE5;&#x7B2C;&#x4E00;&#x500B;Go&#x6E90;&#x6587;&#x4EF6;&#x7684;&#x57FA;&#x790E;&#x6587;&#x4EF6;&#x540D;&#x4F5C;&#x7232;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x540D;&#x5B57;.</p>
<pre><code>$ cat quoteargs.go
package main
@@ -2171,47 +2135,47 @@ func main() {
$ go build quoteargs.go
$ ./quoteargs one &quot;two three&quot; four\ five
[&quot;one&quot; &quot;two three&quot; &quot;four five&quot;]
</code></pre><p>&#x7279;&#x5F46;&#x662F;&#x5C0D;&#x65BC;&#x9019;&#x985E;&#x4E00;&#x6B21;&#x6027;&#x7684;&#x7A0B;&#x5E8F;, &#x6211;&#x5011;&#x7E6B;&#x7D71;&#x76E1;&#x5FEB;&#x7684;&#x69CB;&#x5EFA;&#x4F75;&#x904B;&#x884C;&#x5B83;. <code>go run</code> &#x547D;&#x4EE4;&#x7D50;&#x95A4;&#x4E86;&#x69CB;&#x5EFA;&#x548C;&#x904B;&#x884C;&#x7684;&#x5169;&#x500B;&#x6B65;&#x9A5F;:</p>
</code></pre><p>&#x7279;&#x522B;&#x662F;&#x5C0D;&#x65BC;&#x9019;&#x985E;&#x4E00;&#x6B21;&#x6027;&#x7684;&#x7A0B;&#x5E8F;, &#x6211;&#x5011;&#x7E6B;&#x7D71;&#x76E1;&#x5FEB;&#x7684;&#x69CB;&#x5EFA;&#x4F75;&#x904B;&#x884C;&#x5B83;. <code>go run</code> &#x547D;&#x4EE4;&#x7D50;&#x5408;&#x4E86;&#x69CB;&#x5EFA;&#x548C;&#x904B;&#x884C;&#x7684;&#x5169;&#x500B;&#x6B65;&#x9A5F;:</p>
<pre><code>$ go run quoteargs.go one &quot;two three&quot; four\ five
[&quot;one&quot; &quot;two three&quot; &quot;four five&quot;]
</code></pre><p>&#x7B2C;&#x4E00;&#x884C;&#x7684;&#x53C3;&#x6578;&#x5217;&#x9336;&#x4E2D;&#x7B2C;&#x4E00;&#x500B;&#x4E0D;&#x662F;&#x4EE5; .go &#x7D50;&#x5C3E;&#x7684;&#x5C07;&#x4F5C;&#x70BA;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x53C3;&#x6578;&#x904B;&#x884C;.</p>
</code></pre><p>&#x7B2C;&#x4E00;&#x884C;&#x7684;&#x53C3;&#x6578;&#x5217;&#x8868;&#x4E2D;&#x7B2C;&#x4E00;&#x500B;&#x4E0D;&#x662F;&#x4EE5; .go &#x7D50;&#x5C3E;&#x7684;&#x5C07;&#x4F5C;&#x7232;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x53C3;&#x6578;&#x904B;&#x884C;.</p>
<p>&#x9ED8;&#x8A8D;&#x60C5;&#x6CC1;&#x4E0B;, <code>go build</code> &#x547D;&#x4EE4;&#x69CB;&#x5EFA;&#x6307;&#x5B9A;&#x7684;&#x5305;&#x548C;&#x5B83;&#x4F9D;&#x8CF4;&#x7684;&#x5305;, &#x7136;&#x5F8C;&#x4E1F;&#x68C4;&#x6240;&#x6709;&#x9664;&#x4E86;&#x6700;&#x5F8C;&#x7684;&#x53EF;&#x57F7;&#x884C;&#x6587;&#x4EF6;&#x4E4B;&#x5916;&#x7684;&#x4E2D;&#x9593;&#x7DE8;&#x8B6F;&#x7D50;&#x679C;. &#x4F9D;&#x8CF4;&#x5206;&#x6790;&#x548C;&#x7DE8;&#x8B6F;&#x90FD;&#x662F;&#x5F88;&#x5FEB;&#x7684;, &#x4F46;&#x662F;&#x96A8;&#x7740;&#x9805;&#x76EE;&#x589E;&#x52A0;&#x5230;&#x5E7E;&#x5341;&#x500B;&#x5305;&#x548C;&#x6210;&#x97C6;&#x4E0A;&#x842C;&#x884C;&#x4EE3;&#x78BC;, &#x4F9D;&#x8CF4;&#x95DC;&#x7E6B;&#x5206;&#x6790;&#x548C;&#x7DE8;&#x8B6F;&#x6642;&#x9593;&#x7684;&#x6D88;&#x8017;&#x5C07;&#x8B8A;&#x7684;&#x53EF;&#x89C0;, &#x53EF;&#x80FD;&#x9700;&#x8981;&#x5E7E;&#x79D2;&#x7A2E;, &#x537D;&#x4F7F;&#x9019;&#x4E9B;&#x4F9D;&#x8CF4;&#x9805;&#x6C92;&#x6709;&#x6539;&#x8B8A;.</p>
<p><code>go install</code> &#x547D;&#x4EE4;&#x548C; <code>go build</code> &#x547D;&#x4EE4;&#x5F88;&#x76F8;&#x4F3C;, &#x4F46;&#x662F;&#x5B83;&#x4FDD;&#x5B58;&#x6BCF;&#x500B;&#x5305;&#x7684;&#x7DE8;&#x8B6F;&#x6210;&#x679C;, &#x800C;&#x4E0D;&#x662F;&#x5C07;&#x5B83;&#x5011;&#x90FD;&#x4E1F;&#x68C4;. &#x88AB;&#x7DE8;&#x8B6F;&#x7684;&#x5305;&#x88AB;&#x4FDD;&#x5B58;&#x5230; $GOPATH/pkg &#x76EE;&#x5F54;&#x4E0B;&#x548C; src &#x76EE;&#x5F54;&#x5C0D;&#x61C9;, &#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x88AB;&#x4FDD;&#x5B58;&#x5230; $GOPATH/bin &#x76EE;&#x5F54;. (&#x5F88;&#x591A;&#x7528;&#x6236;&#x5C07; $GOPATH/bin &#x6DFB;&#x52A0;&#x5230;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x8490;&#x7D22;&#x5217;&#x9336;&#x4E2D;.) &#x9084;&#x6709;, <code>go install</code> &#x547D;&#x4EE4;&#x548C; <code>go build</code> &#x547D;&#x4EE4;&#x90FD;&#x4E0D;&#x6703;&#x91CD;&#x65B0;&#x7DE8;&#x8B6F;&#x6C92;&#x6709;&#x9AEE;&#x751F;&#x8B8A;&#x5316;&#x7684;&#x5305;, &#x9019;&#x53EF;&#x4EE5;&#x4F7F;&#x5F8C;&#x7E8C;&#x69CB;&#x5EFA;&#x66F4;&#x5FEB;&#x6377;. &#x70BA;&#x4E86;&#x65B9;&#x4FBF;, <code>go build -i</code> &#x5C07;&#x5B89;&#x88DD;&#x6BCF;&#x500B;&#x76EE;&#x6A19;&#x6240;&#x4F9D;&#x8CF4;&#x7684;&#x5305;.</p>
<p>&#x56E0;&#x70BA;&#x7DE8;&#x8B6F;&#x5C0D;&#x61C9;&#x4E0D;&#x8855;&#x7684;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x5E73;&#x98B1;&#x548C;CPU&#x67B6;&#x69CB;, <code>go install</code> &#x6703;&#x5C07;&#x7DE8;&#x8B6F;&#x7D50;&#x679C;&#x5B89;&#x88DD;&#x5230; GOOS &#x548C; GOARCH &#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x5F54;. &#x4F8B;&#x5982;, &#x5728; Mac &#x7E6B;&#x7D71; golang.org/x/net/html &#x5305;&#x5C07;&#x88AB;&#x5B89;&#x88DD;&#x5230; $GOPATH/pkg/darwin_amd64 &#x76EE;&#x5F54;&#x4E0B;&#x7684; golang.org/x/net/html.a &#x6587;&#x4EF6;.</p>
<p>&#x937C;&#x5C0D;&#x4E0D;&#x8855;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x6216;CPU&#x7684;&#x4EA4;&#x53C9;&#x69CB;&#x5EFA;&#x4E5F;&#x662F;&#x5F88;&#x7C21;&#x55AE;&#x7684;. &#x96BB;&#x9700;&#x8981;&#x8A2D;&#x7F6E;&#x597D;&#x76EE;&#x6A19;&#x5C0D;&#x61C9;&#x7684;GOOS &#x548C; GOARCH, &#x7136;&#x5F8C;&#x904B;&#x884C;&#x69CB;&#x5EFA;&#x76EE;&#x5F54;&#x537D;&#x53EF;. &#x4E0B;&#x9EAB;&#x4EA4;&#x53C9;&#x7DE8;&#x8B6F;&#x7684;&#x7A0B;&#x5E8F;&#x5C07;&#x8F38;&#x9F63;&#x5B83;&#x5728;&#x7DE8;&#x8B6F;&#x6642;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x548C;CPU&#x985E;&#x578B;:</p>
<p><code>go install</code> &#x547D;&#x4EE4;&#x548C; <code>go build</code> &#x547D;&#x4EE4;&#x5F88;&#x76F8;&#x4F3C;, &#x4F46;&#x662F;&#x5B83;&#x4FDD;&#x5B58;&#x6BCF;&#x500B;&#x5305;&#x7684;&#x7DE8;&#x8B6F;&#x6210;&#x679C;, &#x800C;&#x4E0D;&#x662F;&#x5C07;&#x5B83;&#x5011;&#x90FD;&#x4E1F;&#x68C4;. &#x88AB;&#x7DE8;&#x8B6F;&#x7684;&#x5305;&#x88AB;&#x4FDD;&#x5B58;&#x5230; $GOPATH/pkg &#x76EE;&#x9332;&#x4E0B;&#x548C; src &#x76EE;&#x9332;&#x5C0D;&#x61C9;, &#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x88AB;&#x4FDD;&#x5B58;&#x5230; $GOPATH/bin &#x76EE;&#x9332;. (&#x5F88;&#x591A;&#x7528;&#x6236;&#x5C07; $GOPATH/bin &#x6DFB;&#x52A0;&#x5230;&#x53EF;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x8490;&#x7D22;&#x5217;&#x8868;&#x4E2D;.) &#x9084;&#x6709;, <code>go install</code> &#x547D;&#x4EE4;&#x548C; <code>go build</code> &#x547D;&#x4EE4;&#x90FD;&#x4E0D;&#x6703;&#x91CD;&#x65B0;&#x7DE8;&#x8B6F;&#x6C92;&#x6709;&#x767C;&#x751F;&#x8B8A;&#x5316;&#x7684;&#x5305;, &#x9019;&#x53EF;&#x4EE5;&#x4F7F;&#x5F8C;&#x7E8C;&#x69CB;&#x5EFA;&#x66F4;&#x5FEB;&#x6377;. &#x7232;&#x4E86;&#x65B9;&#x4FBF;, <code>go build -i</code> &#x5C07;&#x5B89;&#x88DD;&#x6BCF;&#x500B;&#x76EE;&#x6A19;&#x6240;&#x4F9D;&#x8CF4;&#x7684;&#x5305;.</p>
<p>&#x56E0;&#x7232;&#x7DE8;&#x8B6F;&#x5C0D;&#x61C9;&#x4E0D;&#x540C;&#x7684;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x5E73;&#x98B1;&#x548C;CPU&#x67B6;&#x69CB;, <code>go install</code> &#x6703;&#x5C07;&#x7DE8;&#x8B6F;&#x7D50;&#x679C;&#x5B89;&#x88DD;&#x5230; GOOS &#x548C; GOARCH &#x5C0D;&#x61C9;&#x7684;&#x76EE;&#x9332;. &#x4F8B;&#x5982;, &#x5728; Mac &#x7E6B;&#x7D71; golang.org/x/net/html &#x5305;&#x5C07;&#x88AB;&#x5B89;&#x88DD;&#x5230; $GOPATH/pkg/darwin_amd64 &#x76EE;&#x9332;&#x4E0B;&#x7684; golang.org/x/net/html.a &#x6587;&#x4EF6;.</p>
<p>&#x91DD;&#x5C0D;&#x4E0D;&#x540C;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x6216;CPU&#x7684;&#x4EA4;&#x53C9;&#x69CB;&#x5EFA;&#x4E5F;&#x662F;&#x5F88;&#x7C21;&#x55AE;&#x7684;. &#x96BB;&#x9700;&#x8981;&#x8A2D;&#x7F6E;&#x597D;&#x76EE;&#x6A19;&#x5C0D;&#x61C9;&#x7684;GOOS &#x548C; GOARCH, &#x7136;&#x5F8C;&#x904B;&#x884C;&#x69CB;&#x5EFA;&#x76EE;&#x9332;&#x537D;&#x53EF;. &#x4E0B;&#x9762;&#x4EA4;&#x53C9;&#x7DE8;&#x8B6F;&#x7684;&#x7A0B;&#x5E8F;&#x5C07;&#x8F38;&#x9F63;&#x5B83;&#x5728;&#x7DE8;&#x8B6F;&#x6642;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x548C;CPU&#x985E;&#x578B;:</p>
<pre><code class="lang-Go">gopl.io/ch10/cross
<span class="hljs-keyword">func</span> main() {
fmt.Println(runtime.GOOS, runtime.GOARCH)
}
</code></pre>
<p>&#x4E0B;&#x9EAB;&#x4EE5;64&#x4F4D;&#x548C;32&#x4F4D;&#x74B0;&#x5883;&#x5206;&#x5F46;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;:</p>
<p>&#x4E0B;&#x9762;&#x4EE5;64&#x4F4D;&#x548C;32&#x4F4D;&#x74B0;&#x5883;&#x5206;&#x522B;&#x57F7;&#x884C;&#x7A0B;&#x5E8F;:</p>
<pre><code>$ go build gopl.io/ch10/cross
$ ./cross
darwin amd64
$ GOARCH=386 go build gopl.io/ch10/cross
$ ./cross
darwin 386
</code></pre><p>&#x6709;&#x4E9B;&#x5305;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x937C;&#x5C0D;&#x4E0D;&#x8855;&#x5E73;&#x98B1;&#x548C;&#x8655;&#x7406;&#x5668;&#x985E;&#x578B;&#x8F38;&#x9F63;&#x4E0D;&#x8855;&#x7248;&#x672C;&#x7684;&#x4EE3;&#x78BC;, &#x4EE5;&#x4FBF;&#x65BC;&#x8655;&#x7406;&#x5E95;&#x5C64;&#x7684;&#x53EF;&#x79FB;&#x690D;&#x6027;&#x554F;&#x984C;&#x6216;&#x63D0;&#x4F9B;&#x70BA;&#x4E00;&#x4E9B;&#x7279;&#x9EDE;&#x4EE3;&#x78BC;&#x63D0;&#x4F9B;&#x512A;&#x5316;. &#x5982;&#x679C;&#x4E00;&#x500B;&#x6587;&#x4EF6;&#x540D;&#x5305;&#x542B;&#x4E86;&#x4E00;&#x500B;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x6216;&#x8655;&#x7406;&#x5668;&#x985E;&#x578B;&#x540D;&#x5B57;, &#x4F8B;&#x5982; net_linux.go &#x6216; asm_amd64.s, Go&#x5DE5;&#x5177;&#x5C07;&#x96BB;&#x5728;&#x5C0D;&#x61C9;&#x7684;&#x5E73;&#x98B1;&#x7DE8;&#x8B6F;&#x9019;&#x4E9B;&#x6587;&#x4EF6;. &#x9084;&#x6709;&#x4E00;&#x500B;&#x7279;&#x5F46;&#x7684;&#x69CB;&#x5EFA;&#x8A3B;&#x91CB;&#x8A3B;&#x91CB;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x66F4;&#x591A;&#x7684;&#x69CB;&#x5EFA;&#x63A7;&#x88FD;. &#x4F8B;&#x5982;, &#x6587;&#x4EF6;&#x4E2D;&#x5982;&#x679C;&#x5305;&#x542B;&#x4E0B;&#x9EAB;&#x7684;&#x8A3B;&#x91CB;:</p>
</code></pre><p>&#x6709;&#x4E9B;&#x5305;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x91DD;&#x5C0D;&#x4E0D;&#x540C;&#x5E73;&#x98B1;&#x548C;&#x8655;&#x7406;&#x5668;&#x985E;&#x578B;&#x8F38;&#x9F63;&#x4E0D;&#x540C;&#x7248;&#x672C;&#x7684;&#x4EE3;&#x78BC;, &#x4EE5;&#x4FBF;&#x65BC;&#x8655;&#x7406;&#x5E95;&#x5C64;&#x7684;&#x53EF;&#x79FB;&#x690D;&#x6027;&#x554F;&#x984C;&#x6216;&#x63D0;&#x4F9B;&#x7232;&#x4E00;&#x4E9B;&#x7279;&#x9EDE;&#x4EE3;&#x78BC;&#x63D0;&#x4F9B;&#x512A;&#x5316;. &#x5982;&#x679C;&#x4E00;&#x500B;&#x6587;&#x4EF6;&#x540D;&#x5305;&#x542B;&#x4E86;&#x4E00;&#x500B;&#x64CD;&#x4F5C;&#x7E6B;&#x7D71;&#x6216;&#x8655;&#x7406;&#x5668;&#x985E;&#x578B;&#x540D;&#x5B57;, &#x4F8B;&#x5982; net_linux.go &#x6216; asm_amd64.s, Go&#x5DE5;&#x5177;&#x5C07;&#x96BB;&#x5728;&#x5C0D;&#x61C9;&#x7684;&#x5E73;&#x98B1;&#x7DE8;&#x8B6F;&#x9019;&#x4E9B;&#x6587;&#x4EF6;. &#x9084;&#x6709;&#x4E00;&#x500B;&#x7279;&#x522B;&#x7684;&#x69CB;&#x5EFA;&#x8A3B;&#x91CB;&#x8A3B;&#x91CB;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x66F4;&#x591A;&#x7684;&#x69CB;&#x5EFA;&#x63A7;&#x88FD;. &#x4F8B;&#x5982;, &#x6587;&#x4EF6;&#x4E2D;&#x5982;&#x679C;&#x5305;&#x542B;&#x4E0B;&#x9762;&#x7684;&#x8A3B;&#x91CB;:</p>
<pre><code class="lang-Go"><span class="hljs-comment">// +build linux darwin</span>
</code></pre>
<p>&#x5728;&#x5305;&#x8072;&#x660E;&#x7684;&#x524D;&#x9EAB;(&#x542B;&#x5305;&#x7684;&#x8A3B;&#x91CB;), &#x544A;&#x8A34; <code>go build</code> &#x96BB;&#x5728;&#x937C;&#x5C0D; Linux &#x6216; Mac OS X &#x662F;&#x7E94;&#x7DE8;&#x8B6F;&#x9019;&#x500B;&#x6587;&#x4EF6;. &#x4E0B;&#x9EAB;&#x7684;&#x69CB;&#x5EFA;&#x8A3B;&#x91CB;&#x9336;&#x793A;&#x4E0D;&#x7DE8;&#x8B6F;&#x9019;&#x500B;&#x6587;&#x4EF6;:</p>
<p>&#x5728;&#x5305;&#x8072;&#x660E;&#x7684;&#x524D;&#x9762;(&#x542B;&#x5305;&#x7684;&#x8A3B;&#x91CB;), &#x544A;&#x8A34; <code>go build</code> &#x96BB;&#x5728;&#x91DD;&#x5C0D; Linux &#x6216; Mac OS X &#x662F;&#x7E94;&#x7DE8;&#x8B6F;&#x9019;&#x500B;&#x6587;&#x4EF6;. &#x4E0B;&#x9762;&#x7684;&#x69CB;&#x5EFA;&#x8A3B;&#x91CB;&#x8868;&#x793A;&#x4E0D;&#x7DE8;&#x8B6F;&#x9019;&#x500B;&#x6587;&#x4EF6;:</p>
<pre><code class="lang-Go"><span class="hljs-comment">// +build ignore</span>
</code></pre>
<p>For more details, see the Build Constraints section of the go/build package&#x2019;s documentation:</p>
<p>&#x66F4;&#x591A;&#x7D30;&#x7BC0;, &#x53EF;&#x4EE5;&#x53C3;&#x8003; go/build &#x5305;&#x7684;&#x69CB;&#x5EFA;&#x7D04;&#x675F;&#x90E8;&#x5206;&#x7684;&#x6587;&#x6A94;.</p>
<pre><code>$ go doc go/build
</code></pre><h3 id="1074-&#x5305;&#x6587;&#x6A94;">10.7.4. &#x5305;&#x6587;&#x6A94;</h3>
<p>Go&#x7684;&#x7DE8;&#x78BC;&#x98A8;&#x683C;&#x9F13;&#x52F5;&#x70BA;&#x6BCF;&#x500B;&#x5305;&#x63D0;&#x4F9B;&#x826F;&#x597D;&#x7684;&#x6587;&#x6A94;. &#x5305;&#x4E2D;&#x6BCF;&#x500B;&#x5C0E;&#x9F63;&#x7684;&#x6210;&#x54E1;&#x548C;&#x5305;&#x8072;&#x660E;&#x524D;&#x90FD;&#x61C9;&#x8A72;&#x5305;&#x542B;&#x6DFB;&#x52A0;&#x76EE;&#x7684;&#x548C;&#x7528;&#x6CD5;&#x8AAA;&#x660E;&#x7684;&#x8A3B;&#x91CB;.</p>
<p>Go&#x4E2D;&#x5305;&#x6587;&#x6A94;&#x8A3B;&#x91CB;&#x4E00;&#x822C;&#x662F;&#x5B8C;&#x6574;&#x7684;&#x53E5;&#x5B50;, &#x7B2C;&#x4E00;&#x884C;&#x662F;&#x5305;&#x7684;&#x6458;&#x8981;&#x8AAA;&#x660E;, &#x8A3B;&#x91CB;&#x5F8C;&#x50C5;&#x8DDF;&#x7740;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;. &#x51FD;&#x6578;&#x7684;&#x53C3;&#x6578;&#x6216;&#x5176;&#x4ED6;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x984D;&#x5916;&#x7684;&#x5F15;&#x865F;&#x6216;&#x5176;&#x4ED6;&#x6A19;&#x8A18;&#x8A3B;&#x660E;. &#x4F8B;&#x5982;, &#x4E0B;&#x9EAB;&#x662F; fmt.Fprintf &#x7684;&#x6587;&#x6A94;&#x8A3B;&#x91CB;.</p>
<p>Go&#x7684;&#x7DE8;&#x78BC;&#x98A8;&#x683C;&#x9F13;&#x52F5;&#x7232;&#x6BCF;&#x500B;&#x5305;&#x63D0;&#x4F9B;&#x826F;&#x597D;&#x7684;&#x6587;&#x6A94;. &#x5305;&#x4E2D;&#x6BCF;&#x500B;&#x5C0E;&#x9F63;&#x7684;&#x6210;&#x54E1;&#x548C;&#x5305;&#x8072;&#x660E;&#x524D;&#x90FD;&#x61C9;&#x8A72;&#x5305;&#x542B;&#x6DFB;&#x52A0;&#x76EE;&#x7684;&#x548C;&#x7528;&#x6CD5;&#x8AAC;&#x660E;&#x7684;&#x8A3B;&#x91CB;.</p>
<p>Go&#x4E2D;&#x5305;&#x6587;&#x6A94;&#x8A3B;&#x91CB;&#x4E00;&#x822C;&#x662F;&#x5B8C;&#x6574;&#x7684;&#x53E5;&#x5B50;, &#x7B2C;&#x4E00;&#x884C;&#x662F;&#x5305;&#x7684;&#x6458;&#x8981;&#x8AAC;&#x660E;, &#x8A3B;&#x91CB;&#x5F8C;&#x50C5;&#x8DDF;&#x7740;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;. &#x51FD;&#x6578;&#x7684;&#x53C3;&#x6578;&#x6216;&#x5176;&#x4ED6;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x984D;&#x5916;&#x7684;&#x5F15;&#x865F;&#x6216;&#x5176;&#x4ED6;&#x6A19;&#x8A18;&#x8A3B;&#x660E;. &#x4F8B;&#x5982;, &#x4E0B;&#x9762;&#x662F; fmt.Fprintf &#x7684;&#x6587;&#x6A94;&#x8A3B;&#x91CB;.</p>
<pre><code class="lang-Go"><span class="hljs-comment">// Fprintf formats according to a format specifier and writes to w.</span>
<span class="hljs-comment">// It returns the number of bytes written and any write error encountered.</span>
<span class="hljs-keyword">func</span> Fprintf(w io.Writer, format <span class="hljs-typename">string</span>, a ...<span class="hljs-keyword">interface</span>{}) (<span class="hljs-typename">int</span>, error)
</code></pre>
<p>Fprintf &#x51FD;&#x6578;&#x683C;&#x5F0F;&#x5316;&#x7684;&#x7D30;&#x7BC0;&#x5728; fmt &#x5305;&#x6587;&#x6A94;&#x4E2D;&#x63CF;&#x8FF0;. &#x5982;&#x679C;&#x8A3B;&#x91CB;&#x5F8C;&#x50C5;&#x8DDF;&#x7740;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;, &#x90A3;&#x8A3B;&#x91CB;&#x5C0D;&#x61C9;&#x6574;&#x500B;&#x5305;&#x7684;&#x6587;&#x6A94;. &#x5305;&#x6587;&#x6A94;&#x5C0D;&#x61C9;&#x7684;&#x8A3B;&#x91CB;&#x96BB;&#x80FD;&#x6709;&#x4E00;&#x500B;(&#x8B6F;&#x8A3B;: &#x5176;&#x5BE6;&#x53EF;&#x4EE5;&#x591A;&#x500B;, &#x5B83;&#x5011;&#x6703;&#x7D44;&#x95A4;&#x6210;&#x4E00;&#x500B;&#x5305;&#x6587;&#x6A94;&#x8A3B;&#x91CB;.), &#x53EF;&#x4EE5;&#x9F63;&#x73FE;&#x5728;&#x4EFB;&#x4F55;&#x4E00;&#x500B;&#x6E90;&#x6587;&#x4EF6;&#x4E2D;. &#x5982;&#x679C;&#x5305;&#x7684;&#x8A3B;&#x91CB;&#x5167;&#x5BB9;&#x6BD4;&#x8F03;&#x9577;, &#x53EF;&#x4EE5;&#x7576;&#x5230;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x6587;&#x4EF6;&#x4E2D;; fmt &#x5305;&#x8A3B;&#x91CB;&#x5C31;&#x6709; 300 &#x884C;&#x4E4B;&#x591A;. &#x9019;&#x500B;&#x5C08;&#x9580;&#x7528;&#x65BC;&#x4FDD;&#x8B49;&#x5305;&#x6587;&#x6A94;&#x7684;&#x6587;&#x4EF6;&#x901A;&#x5E38;&#x53EB; doc.go.</p>
<p>&#x597D;&#x7684;&#x6587;&#x6A94;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x9EAB;&#x9EAB;&#x4FF1;&#x5230;, &#x6587;&#x6A94;&#x672C;&#x8EAB;&#x61C9;&#x8A72;&#x662F;&#x7C21;&#x6F54;&#x4F46;&#x53EF;&#x4E0D;&#x5FFD;&#x7565;&#x7684;. &#x4E8B;&#x5BE6;&#x4E0A;, Go&#x7684;&#x98A8;&#x683C;&#x559C;&#x6B61;&#x7C21;&#x6F54;&#x7684;&#x6587;&#x6A94;, &#x4F75;&#x4E14;&#x6587;&#x6A94;&#x4E5F;&#x662F;&#x9700;&#x8981;&#x60F3;&#x4EE3;&#x78BC;&#x4E00;&#x6A23;&#x7DAD;&#x8B77;&#x7684;. &#x5C0D;&#x65BC;&#x4E00;&#x7D44;&#x8072;&#x660E;&#x8A9E;&#x53E5;, &#x53EF;&#x4EE5;&#x8855;&#x4E00;&#x500B;&#x7CBE;&#x934A;&#x7684;&#x53E5;&#x5B50;&#x63CF;&#x8FF0;, &#x5982;&#x679C;&#x662F;&#x986F;&#x800C;&#x6613;&#x898B;&#x7684;&#x529F;&#x80FD;&#x5247;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x8A3B;&#x91CB;.</p>
<p>&#x5728;&#x672C;&#x66F8;&#x4E2D;, &#x96BB;&#x8981;&#x7A7A;&#x9593;&#x5141;&#x8A31;, &#x6211;&#x5011;&#x4E4B;&#x524D;&#x5F88;&#x591A;&#x5305;&#x8072;&#x660E;&#x90FD;&#x5305;&#x542B;&#x4E86;&#x8A3B;&#x91CB;&#x6587;&#x6A94;, &#x4F46;&#x4F60;&#x53EF;&#x4EE5;&#x5F9E;&#x6A19;&#x6E96;&#x5EAB;&#x4E2D;&#x9AEE;&#x73FE;&#x5F88;&#x591A;&#x66F4;&#x597D;&#x7684;&#x4F8B;&#x5B50;. &#x6709;&#x5169;&#x500B;&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x5E6B;&#x5230;&#x4F60;.</p>
<p><code>go doc</code> &#x547D;&#x4EE4;&#x6253;&#x5370;&#x5305;&#x7684;&#x8072;&#x660E;&#x548C;&#x6BCF;&#x500B;&#x6210;&#x54E1;&#x7684;&#x6587;&#x6A94;&#x8A3B;&#x91CB;, &#x4E0B;&#x9EAB;&#x662F;&#x6574;&#x500B;&#x5305;&#x7684;&#x6587;&#x6A94;:</p>
<p>Fprintf &#x51FD;&#x6578;&#x683C;&#x5F0F;&#x5316;&#x7684;&#x7D30;&#x7BC0;&#x5728; fmt &#x5305;&#x6587;&#x6A94;&#x4E2D;&#x63CF;&#x8FF0;. &#x5982;&#x679C;&#x8A3B;&#x91CB;&#x5F8C;&#x50C5;&#x8DDF;&#x7740;&#x5305;&#x8072;&#x660E;&#x8A9E;&#x53E5;, &#x90A3;&#x8A3B;&#x91CB;&#x5C0D;&#x61C9;&#x6574;&#x500B;&#x5305;&#x7684;&#x6587;&#x6A94;. &#x5305;&#x6587;&#x6A94;&#x5C0D;&#x61C9;&#x7684;&#x8A3B;&#x91CB;&#x96BB;&#x80FD;&#x6709;&#x4E00;&#x500B;(&#x8B6F;&#x8A3B;: &#x5176;&#x5BE6;&#x53EF;&#x4EE5;&#x591A;&#x500B;, &#x5B83;&#x5011;&#x6703;&#x7D44;&#x5408;&#x6210;&#x4E00;&#x500B;&#x5305;&#x6587;&#x6A94;&#x8A3B;&#x91CB;.), &#x53EF;&#x4EE5;&#x9F63;&#x73FE;&#x5728;&#x4EFB;&#x4F55;&#x4E00;&#x500B;&#x6E90;&#x6587;&#x4EF6;&#x4E2D;. &#x5982;&#x679C;&#x5305;&#x7684;&#x8A3B;&#x91CB;&#x5167;&#x5BB9;&#x6BD4;&#x8F03;&#x9577;, &#x53EF;&#x4EE5;&#x7576;&#x5230;&#x4E00;&#x500B;&#x7368;&#x7ACB;&#x7684;&#x6587;&#x4EF6;&#x4E2D;; fmt &#x5305;&#x8A3B;&#x91CB;&#x5C31;&#x6709; 300 &#x884C;&#x4E4B;&#x591A;. &#x9019;&#x500B;&#x5C08;&#x9580;&#x7528;&#x65BC;&#x4FDD;&#x8B49;&#x5305;&#x6587;&#x6A94;&#x7684;&#x6587;&#x4EF6;&#x901A;&#x5E38;&#x53EB; doc.go.</p>
<p>&#x597D;&#x7684;&#x6587;&#x6A94;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x9762;&#x9762;&#x4FF1;&#x5230;, &#x6587;&#x6A94;&#x672C;&#x8EAB;&#x61C9;&#x8A72;&#x662F;&#x7C21;&#x6F54;&#x4F46;&#x53EF;&#x4E0D;&#x5FFD;&#x7565;&#x7684;. &#x4E8B;&#x5BE6;&#x4E0A;, Go&#x7684;&#x98A8;&#x683C;&#x559C;&#x6B61;&#x7C21;&#x6F54;&#x7684;&#x6587;&#x6A94;, &#x4F75;&#x4E14;&#x6587;&#x6A94;&#x4E5F;&#x662F;&#x9700;&#x8981;&#x60F3;&#x4EE3;&#x78BC;&#x4E00;&#x6A23;&#x7DAD;&#x8B77;&#x7684;. &#x5C0D;&#x65BC;&#x4E00;&#x7D44;&#x8072;&#x660E;&#x8A9E;&#x53E5;, &#x53EF;&#x4EE5;&#x540C;&#x4E00;&#x500B;&#x7CBE;&#x934A;&#x7684;&#x53E5;&#x5B50;&#x63CF;&#x8FF0;, &#x5982;&#x679C;&#x662F;&#x986F;&#x800C;&#x6613;&#x898B;&#x7684;&#x529F;&#x80FD;&#x5247;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x8A3B;&#x91CB;.</p>
<p>&#x5728;&#x672C;&#x66F8;&#x4E2D;, &#x96BB;&#x8981;&#x7A7A;&#x9593;&#x5141;&#x8A31;, &#x6211;&#x5011;&#x4E4B;&#x524D;&#x5F88;&#x591A;&#x5305;&#x8072;&#x660E;&#x90FD;&#x5305;&#x542B;&#x4E86;&#x8A3B;&#x91CB;&#x6587;&#x6A94;, &#x4F46;&#x4F60;&#x53EF;&#x4EE5;&#x5F9E;&#x6A19;&#x6E96;&#x5EAB;&#x4E2D;&#x767C;&#x73FE;&#x5F88;&#x591A;&#x66F4;&#x597D;&#x7684;&#x4F8B;&#x5B50;. &#x6709;&#x5169;&#x500B;&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x5E6B;&#x5230;&#x4F60;.</p>
<p><code>go doc</code> &#x547D;&#x4EE4;&#x6253;&#x5370;&#x5305;&#x7684;&#x8072;&#x660E;&#x548C;&#x6BCF;&#x500B;&#x6210;&#x54E1;&#x7684;&#x6587;&#x6A94;&#x8A3B;&#x91CB;, &#x4E0B;&#x9762;&#x662F;&#x6574;&#x500B;&#x5305;&#x7684;&#x6587;&#x6A94;:</p>
<pre><code>$ go doc time
package time // import &quot;time&quot;
@@ -2236,22 +2200,22 @@ func Since(t Time) Duration
func (d Duration) Seconds() float64
Seconds returns the duration as a floating-point number of seconds.
</code></pre><p>&#x8A72;&#x5DE5;&#x5177;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x8F38;&#x5165;&#x5B8C;&#x6574;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6216;&#x6B63;&#x78BA;&#x7684;&#x5927;&#x5C0F;&#x5BEB;. &#x4E0B;&#x9EAB;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; encoding/json &#x5305;&#x7684; (*json.Decoder).Decode &#x65B9;&#x6CD5;&#x7684;&#x6587;&#x6A94;:</p>
</code></pre><p>&#x8A72;&#x5DE5;&#x5177;&#x4F75;&#x4E0D;&#x9700;&#x8981;&#x8F38;&#x5165;&#x5B8C;&#x6574;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;&#x6216;&#x6B63;&#x78BA;&#x7684;&#x5927;&#x5C0F;&#x5BEB;. &#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; encoding/json &#x5305;&#x7684; (*json.Decoder).Decode &#x65B9;&#x6CD5;&#x7684;&#x6587;&#x6A94;:</p>
<pre><code>$ go doc json.decode
func (dec *Decoder) Decode(v interface{}) error
Decode reads the next JSON-encoded value from its input and stores
it in the value pointed to by v.
</code></pre><p>&#x7B2C;&#x4E8C;&#x500B;&#x5DE5;&#x5177;, &#x4EE4;&#x4EBA;&#x774F;&#x60D1;&#x7684;&#x4E5F;&#x662F;&#x540D;&#x53EB; godoc, &#x63D0;&#x4F9B;&#x53EF;&#x4EE5;&#x76F8;&#x4E92;&#x4EA4;&#x53C9;&#x5F15;&#x7528;&#x7684; HTML &#x9801;&#x9EAB;, &#x4F46;&#x662F;&#x5305;&#x542B;&#x548C; <code>go doc</code> &#x76F8;&#x8855;&#x4EE5;&#x53CA;&#x66F4;&#x591A;&#x7684;&#x4FE1;&#x606F;. 10.1 &#x7BC0;&#x6F14;&#x793A;&#x4E86; time &#x5305;&#x7684;&#x6587;&#x6A94;, 11.6 &#x7BC0;&#x5C07;&#x770B;&#x5230;godoc&#x6F14;&#x793A;&#x53EF;&#x4EE5;&#x4EA4;&#x4E92;&#x7684;&#x793A;&#x4F8B;&#x7A0B;&#x5E8F;. godoc &#x7684;&#x5728;&#x7DAB;&#x670D;&#x52D9; <a href="https://godoc.org" target="_blank">https://godoc.org</a>, &#x5305;&#x542B;&#x4E86;&#x6210;&#x97C6;&#x4E0A;&#x842C;&#x7684;&#x958B;&#x6E90;&#x5305;&#x7684;&#x6AA2;&#x7D22;&#x5DE5;&#x5177;.</p>
</code></pre><p>&#x7B2C;&#x4E8C;&#x500B;&#x5DE5;&#x5177;, &#x4EE4;&#x4EBA;&#x774F;&#x60D1;&#x7684;&#x4E5F;&#x662F;&#x540D;&#x53EB; godoc, &#x63D0;&#x4F9B;&#x53EF;&#x4EE5;&#x76F8;&#x4E92;&#x4EA4;&#x53C9;&#x5F15;&#x7528;&#x7684; HTML &#x9801;&#x9762;, &#x4F46;&#x662F;&#x5305;&#x542B;&#x548C; <code>go doc</code> &#x76F8;&#x540C;&#x4EE5;&#x53CA;&#x66F4;&#x591A;&#x7684;&#x4FE1;&#x606F;. 10.1 &#x7BC0;&#x6F14;&#x793A;&#x4E86; time &#x5305;&#x7684;&#x6587;&#x6A94;, 11.6 &#x7BC0;&#x5C07;&#x770B;&#x5230;godoc&#x6F14;&#x793A;&#x53EF;&#x4EE5;&#x4EA4;&#x4E92;&#x7684;&#x793A;&#x4F8B;&#x7A0B;&#x5E8F;. godoc &#x7684;&#x5728;&#x7DDA;&#x670D;&#x52D9; <a href="https://godoc.org" target="_blank">https://godoc.org</a>, &#x5305;&#x542B;&#x4E86;&#x6210;&#x97C6;&#x4E0A;&#x842C;&#x7684;&#x958B;&#x6E90;&#x5305;&#x7684;&#x6AA2;&#x7D22;&#x5DE5;&#x5177;.</p>
<p>You can also run an instance of godoc in your workspace if you want to browse your own packages. Visit <a href="http://localhost:8000/pkg" target="_blank">http://localhost:8000/pkg</a> in your browser while running this command:</p>
<p>&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x5728;&#x81EA;&#x5DF1;&#x7684;&#x5DE5;&#x4F5C;&#x5340;&#x76EE;&#x5F54;&#x5141;&#x8A31; godoc &#x670D;&#x52D9;. &#x904B;&#x884C;&#x4E0B;&#x9EAB;&#x7684;&#x547D;&#x4EE4;, &#x7136;&#x5F8C;&#x5728;&#x700F;&#x89BD;&#x5668;&#x67FB;&#x770B; <a href="http://localhost:8000/pkg" target="_blank">http://localhost:8000/pkg</a> &#x9801;&#x9EAB;:</p>
<p>&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x5728;&#x81EA;&#x5DF1;&#x7684;&#x5DE5;&#x4F5C;&#x5340;&#x76EE;&#x9332;&#x5141;&#x8A31; godoc &#x670D;&#x52D9;. &#x904B;&#x884C;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;, &#x7136;&#x5F8C;&#x5728;&#x700F;&#x89BD;&#x5668;&#x67FB;&#x770B; <a href="http://localhost:8000/pkg" target="_blank">http://localhost:8000/pkg</a> &#x9801;&#x9762;:</p>
<pre><code>$ godoc -http :8000
</code></pre><p>&#x5176;&#x4E2D; <code>-analysis=type</code> &#x548C; <code>-analysis=pointer</code> &#x547D;&#x4EE4;&#x884C;&#x6A19;&#x8A8C;&#x53C3;&#x6578;&#x7528;&#x65BC;&#x6253;&#x958B;&#x6587;&#x6A94;&#x548C;&#x4EE3;&#x78BC;&#x4E2D;&#x95DC;&#x65BC;&#x975C;&#x614B;&#x5206;&#x6790;&#x7684;&#x7D50;&#x679C;.</p>
<h3 id="1075-&#x5167;&#x90E8;&#x5305;">10.7.5. &#x5167;&#x90E8;&#x5305;</h3>
<p>&#x5728;Go&#x7A0B;&#x5E8F;&#x4E2D;, &#x5305;&#x7684;&#x5C01;&#x88DD;&#x6A5F;&#x88FD;&#x662F;&#x4E00;&#x500B;&#x91CD;&#x8981;&#x7684;&#x7279;&#x6027;. &#x70BA;&#x5C0E;&#x9F63;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x96BB;&#x5728;&#x8855;&#x4E00;&#x500B;&#x5305;&#x5167;&#x90E8;&#x53EF;&#x4EE5;&#x8A2A;&#x554F;, &#x5C0E;&#x9F63;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x5247;&#x662F;&#x9EAB;&#x66CF;&#x5168;&#x4E16;&#x754C;&#x53EF;&#x898B;.</p>
<p>&#x6709;&#x6642;&#x5019;, &#x4E00;&#x500B;&#x4E2D;&#x9593;&#x7684;&#x72C0;&#x614B;&#x53EF;&#x80FD;&#x4E5F;&#x662F;&#x6709;&#x7528;&#x7684;, &#x5C0D;&#x65BC;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x4FE1;&#x4EFB;&#x7684;&#x5305;&#x662F;&#x53EF;&#x898B;&#x7684;, &#x4F46;&#x4F75;&#x4E0D;&#x662F;&#x5C0D;&#x6240;&#x6709;&#x8ABF;&#x7528;&#x8005;&#x90FD;&#x53EF;&#x898B;. &#x4F8B;&#x5982;, &#x7576;&#x6211;&#x5011;&#x8A08;&#x5283;&#x5C07;&#x4E00;&#x500B;&#x5927;&#x7684;&#x5305;&#x62C6;&#x5206;&#x70BA;&#x5F88;&#x591A;&#x5C0F;&#x7684;&#x66F4;&#x5BB9;&#x6613;&#x7BA1;&#x7406;&#x7684;&#x5B50;&#x5305;, &#x4F46;&#x662F;&#x6211;&#x5011;&#x4F75;&#x4E0D;&#x60F3;&#x5C07;&#x5167;&#x90E8;&#x7684;&#x5B50;&#x5305;&#x7D50;&#x69CB;&#x4E5F;&#x5B8C;&#x5168;&#x66B4;&#x9732;&#x9F63;&#x53BB;. &#x8855;&#x6642;, &#x6211;&#x5011;&#x80AF;&#x5462;&#x500B;&#x9084;&#x5E0C;&#x671B;&#x5728;&#x5167;&#x90E8;&#x5B50;&#x5305;&#x4E4B;&#x9593;&#x5171;&#x4EAB;&#x4E00;&#x4E9B;&#x901A;&#x7528;&#x7684;&#x8655;&#x7406;&#x5305;. &#x6216;&#x8005;&#x6211;&#x5011;&#x96BB;&#x662F;&#x60F3;&#x5BE6;&#x9A57;&#x4E00;&#x500B;&#x65B0;&#x5305;&#x7684;&#x9084;&#x4F75;&#x4E0D;&#x7A69;&#x5B9A;&#x7684;&#x63A5;&#x53E3;, &#x66AB;&#x6642;&#x96BB;&#x66B4;&#x9732;&#x7D66;&#x4E00;&#x4E9B;&#x53D7;&#x9650;&#x88FD;&#x7684;&#x5BA2;&#x6236;&#x7AEF;.</p>
<p>&#x5728;Go&#x7A0B;&#x5E8F;&#x4E2D;, &#x5305;&#x7684;&#x5C01;&#x88DD;&#x6A5F;&#x88FD;&#x662F;&#x4E00;&#x500B;&#x91CD;&#x8981;&#x7684;&#x7279;&#x6027;. &#x7232;&#x5C0E;&#x9F63;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x96BB;&#x5728;&#x540C;&#x4E00;&#x500B;&#x5305;&#x5167;&#x90E8;&#x53EF;&#x4EE5;&#x8A2A;&#x554F;, &#x5C0E;&#x9F63;&#x7684;&#x6A19;&#x8B58;&#x7B26;&#x5247;&#x662F;&#x9762;&#x5411;&#x5168;&#x4E16;&#x754C;&#x53EF;&#x898B;.</p>
<p>&#x6709;&#x6642;&#x5019;, &#x4E00;&#x500B;&#x4E2D;&#x9593;&#x7684;&#x72C0;&#x614B;&#x53EF;&#x80FD;&#x4E5F;&#x662F;&#x6709;&#x7528;&#x7684;, &#x5C0D;&#x65BC;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x4FE1;&#x4EFB;&#x7684;&#x5305;&#x662F;&#x53EF;&#x898B;&#x7684;, &#x4F46;&#x4F75;&#x4E0D;&#x662F;&#x5C0D;&#x6240;&#x6709;&#x8ABF;&#x7528;&#x8005;&#x90FD;&#x53EF;&#x898B;. &#x4F8B;&#x5982;, &#x7576;&#x6211;&#x5011;&#x8A08;&#x5283;&#x5C07;&#x4E00;&#x500B;&#x5927;&#x7684;&#x5305;&#x62C6;&#x5206;&#x7232;&#x5F88;&#x591A;&#x5C0F;&#x7684;&#x66F4;&#x5BB9;&#x6613;&#x7BA1;&#x7406;&#x7684;&#x5B50;&#x5305;, &#x4F46;&#x662F;&#x6211;&#x5011;&#x4F75;&#x4E0D;&#x60F3;&#x5C07;&#x5167;&#x90E8;&#x7684;&#x5B50;&#x5305;&#x7D50;&#x69CB;&#x4E5F;&#x5B8C;&#x5168;&#x66B4;&#x9732;&#x9F63;&#x53BB;. &#x540C;&#x6642;, &#x6211;&#x5011;&#x80AF;&#x5462;&#x500B;&#x9084;&#x5E0C;&#x671B;&#x5728;&#x5167;&#x90E8;&#x5B50;&#x5305;&#x4E4B;&#x9593;&#x5171;&#x4EAB;&#x4E00;&#x4E9B;&#x901A;&#x7528;&#x7684;&#x8655;&#x7406;&#x5305;. &#x6216;&#x8005;&#x6211;&#x5011;&#x96BB;&#x662F;&#x60F3;&#x5BE6;&#x9A57;&#x4E00;&#x500B;&#x65B0;&#x5305;&#x7684;&#x9084;&#x4F75;&#x4E0D;&#x7A69;&#x5B9A;&#x7684;&#x63A5;&#x53E3;, &#x66AB;&#x6642;&#x96BB;&#x66B4;&#x9732;&#x7D66;&#x4E00;&#x4E9B;&#x53D7;&#x9650;&#x88FD;&#x7684;&#x5BA2;&#x6236;&#x7AEF;.</p>
<p><img src="../images/ch10-01.png" alt=""></p>
<p>&#x70BA;&#x4E86;&#x6EFF;&#x8DB3;&#x9019;&#x4E9B;&#x9700;&#x6C42;, Go&#x69CB;&#x5EFA;&#x5DE5;&#x5177;&#x652F;&#x6301;&#x5305;&#x542B; internal &#x540D;&#x5B57;&#x7684;&#x8DEF;&#x5F91;&#x6BB5;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x9019;&#x7A2E;&#x5305;&#x53EB; internal &#x5305;, &#x4E00;&#x500B; internal &#x5305;&#x96BB;&#x80FD;&#x88AB;&#x6709;&#x548C;internal&#x76EE;&#x5F54;&#x6709;&#x8855;&#x4E00;&#x500B;&#x7236;&#x76EE;&#x5F54;&#x7684;&#x5305;&#x6240;&#x5C0E;&#x5165;. &#x4F8B;&#x5982;, net/http/internal/chunked &#x5167;&#x90E8;&#x5305;&#x96BB;&#x80FD;&#x88AB; net/http/httputil &#x6216; net/http &#x5C0E;&#x5165;, &#x4F46;&#x662F;&#x4E0D;&#x80FD;&#x88AB; net/url &#x5305;&#x5C0E;&#x5165;. &#x4F46;&#x662F; net/url &#x5305; &#x53EF;&#x4EE5;&#x5C0E;&#x5165; net/http/httputil.</p>
<p>&#x7232;&#x4E86;&#x6EFF;&#x8DB3;&#x9019;&#x4E9B;&#x9700;&#x6C42;, Go&#x69CB;&#x5EFA;&#x5DE5;&#x5177;&#x652F;&#x6301;&#x5305;&#x542B; internal &#x540D;&#x5B57;&#x7684;&#x8DEF;&#x5F91;&#x6BB5;&#x7684;&#x5305;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x9019;&#x7A2E;&#x5305;&#x53EB; internal &#x5305;, &#x4E00;&#x500B; internal &#x5305;&#x96BB;&#x80FD;&#x88AB;&#x6709;&#x548C;internal&#x76EE;&#x9332;&#x6709;&#x540C;&#x4E00;&#x500B;&#x7236;&#x76EE;&#x9332;&#x7684;&#x5305;&#x6240;&#x5C0E;&#x5165;. &#x4F8B;&#x5982;, net/http/internal/chunked &#x5167;&#x90E8;&#x5305;&#x96BB;&#x80FD;&#x88AB; net/http/httputil &#x6216; net/http &#x5C0E;&#x5165;, &#x4F46;&#x662F;&#x4E0D;&#x80FD;&#x88AB; net/url &#x5305;&#x5C0E;&#x5165;. &#x4F46;&#x662F; net/url &#x5305; &#x53EF;&#x4EE5;&#x5C0E;&#x5165; net/http/httputil.</p>
<pre><code>net/http
net/http/internal/chunked
net/http/httputil
@@ -2260,7 +2224,7 @@ net/url
<p><code>go list</code> &#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x5831;&#x544A;&#x53EF;&#x7528;&#x5305;&#x7684;&#x4FE1;&#x606F;. &#x5176;&#x6700;&#x7C21;&#x55AE;&#x7684;&#x5F62;&#x5F0F;, &#x53EF;&#x4EE5;&#x6E2C;&#x8A66;&#x5305;&#x662F;&#x5426;&#x5728;&#x5DE5;&#x4F5C;&#x5340;&#x4F75;&#x6253;&#x5370;&#x4ED6;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;:</p>
<pre><code>$ go list github.com/go-sql-driver/mysql
github.com/go-sql-driver/mysql
</code></pre><p><code>go list</code> &#x53C3;&#x6578;&#x9084;&#x53EF;&#x4EE5;&#x7528; <code>&quot;...&quot;</code> &#x9336;&#x793A;&#x5339;&#x914D;&#x4EFB;&#x610F;&#x7684;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x5B83;&#x4F86;&#x5217;&#x9336;&#x5DE5;&#x4F5C;&#x5340;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x5305;:</p>
</code></pre><p><code>go list</code> &#x53C3;&#x6578;&#x9084;&#x53EF;&#x4EE5;&#x7528; <code>&quot;...&quot;</code> &#x8868;&#x793A;&#x5339;&#x914D;&#x4EFB;&#x610F;&#x7684;&#x5305;&#x7684;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;. &#x6211;&#x5011;&#x53EF;&#x4EE5;&#x7528;&#x5B83;&#x4F86;&#x5217;&#x8868;&#x5DE5;&#x4F5C;&#x5340;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x5305;:</p>
<pre><code>$ go list ...
archive/tar
archive/zip
@@ -2269,7 +2233,7 @@ bytes
cmd/addr2line
cmd/api
...many more...
</code></pre><p>&#x6216;&#x8005;&#x662F;&#x7279;&#x5B9A;&#x5B50;&#x76EE;&#x5F54;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x5305;:</p>
</code></pre><p>&#x6216;&#x8005;&#x662F;&#x7279;&#x5B9A;&#x5B50;&#x76EE;&#x9332;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x5305;:</p>
<pre><code>$ go list gopl.io/ch3/...
gopl.io/ch3/basename1
gopl.io/ch3/basename2
@@ -2282,7 +2246,7 @@ gopl.io/ch3/surface
<pre><code>$ go list ...xml...
encoding/xml
gopl.io/ch7/xmlselect
</code></pre><p><code>go list</code> &#x53EF;&#x4EE5;&#x7A6B;&#x53D6;&#x6BCF;&#x500B;&#x5305;&#x5B8C;&#x6574;&#x7684;&#x5143;&#x4FE1;&#x606F;, &#x800C;&#x4E0D;&#x50C5;&#x50C5;&#x96BB;&#x662F;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x9019;&#x4E9B;&#x4FE1;&#x606F;&#x53EF;&#x4EE5;&#x4EE5;&#x4E0D;&#x8855;&#x683C;&#x5F0F;&#x63D0;&#x4F9B;&#x7D66;&#x7528;&#x6236;. &#x5176;&#x4E2D; <code>-json</code> &#x6A19;&#x8A8C;&#x53C3;&#x6578;&#x9336;&#x793A;&#x7528;JSON&#x683C;&#x5F0F;&#x6253;&#x5370;&#x6BCF;&#x500B;&#x5305;&#x7684;&#x5143;&#x4FE1;&#x606F;.</p>
</code></pre><p><code>go list</code> &#x53EF;&#x4EE5;&#x7A6B;&#x53D6;&#x6BCF;&#x500B;&#x5305;&#x5B8C;&#x6574;&#x7684;&#x5143;&#x4FE1;&#x606F;, &#x800C;&#x4E0D;&#x50C5;&#x50C5;&#x96BB;&#x662F;&#x5C0E;&#x5165;&#x8DEF;&#x5F91;, &#x9019;&#x4E9B;&#x4FE1;&#x606F;&#x53EF;&#x4EE5;&#x4EE5;&#x4E0D;&#x540C;&#x683C;&#x5F0F;&#x63D0;&#x4F9B;&#x7D66;&#x7528;&#x6236;. &#x5176;&#x4E2D; <code>-json</code> &#x6A19;&#x8A8C;&#x53C3;&#x6578;&#x8868;&#x793A;&#x7528;JSON&#x683C;&#x5F0F;&#x6253;&#x5370;&#x6BCF;&#x500B;&#x5305;&#x7684;&#x5143;&#x4FE1;&#x606F;.</p>
<pre><code>$ go list -json hash
{
&quot;Dir&quot;: &quot;/home/gopher/go/src/hash&quot;,
@@ -2308,23 +2272,23 @@ gopl.io/ch7/xmlselect
&quot;unsafe&quot;
]
}
</code></pre><p>&#x53C3;&#x6578; <code>-f</code> &#x5141;&#x8A31;&#x7528;&#x6236;&#x4F7F;&#x7528; text/template (&#xA7;4.6) &#x7684;&#x6A21;&#x95C6;&#x8A9E;&#x8A00;&#x5B9A;&#x7FA9;&#x8F38;&#x9F63;&#x6587;&#x672C;&#x7684;&#x683C;&#x5F0F;. &#x4E0B;&#x9EAB;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; strconv &#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x7684;&#x5305;, &#x7136;&#x5F8C;&#x7528; join &#x6A21;&#x95C6;&#x51FD;&#x6578;&#x93C8;&#x63A5;&#x70BA;&#x4E00;&#x884C;, &#x7528;&#x4E00;&#x500B;&#x7A7A;&#x683C;&#x5206;&#x9694;:</p>
</code></pre><p>&#x53C3;&#x6578; <code>-f</code> &#x5141;&#x8A31;&#x7528;&#x6236;&#x4F7F;&#x7528; text/template (&#xA7;4.6) &#x7684;&#x6A21;&#x95C6;&#x8A9E;&#x8A00;&#x5B9A;&#x7FA9;&#x8F38;&#x9F63;&#x6587;&#x672C;&#x7684;&#x683C;&#x5F0F;. &#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; strconv &#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x7684;&#x5305;, &#x7136;&#x5F8C;&#x7528; join &#x6A21;&#x95C6;&#x51FD;&#x6578;&#x93C8;&#x63A5;&#x7232;&#x4E00;&#x884C;, &#x7528;&#x4E00;&#x500B;&#x7A7A;&#x683C;&#x5206;&#x9694;:</p>
<pre><code>$ go list -f &apos;{{join .Deps &quot; &quot;}}&apos; strconv
errors math runtime unicode/utf8 unsafe
</code></pre><p>&#x8B6F;&#x8A3B;: &#x4E0A;&#x9EAB;&#x7684;&#x547D;&#x4EE4;&#x5728; Windows &#x7684;&#x547D;&#x4EE4;&#x884C;&#x904B;&#x884C;&#x6703;&#x9047;&#x5230; <code>template: main:1: unclosed action</code> &#x7684;&#x932F;&#x8AA4;. &#x7522;&#x751F;&#x932F;&#x8AA4;&#x7684;&#x539F;&#x56E0;&#x662F;&#x56E0;&#x70BA;&#x547D;&#x4EE4;&#x884C;&#x5C0D;&#x88CF;&#x9EAB;&#x7684; <code>&quot; &quot;</code> &#x53C3;&#x6578;&#x9032;&#x884C;&#x8F49;&#x7FA9;&#x4E86;. &#x6309;&#x7167;&#x4E0B;&#x9EAB;&#x7684;&#x65B9;&#x6CD5;&#x89E3;&#x6C7A;&#x8F49;&#x7FA9;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x554F;&#x984C;:</p>
</code></pre><p>&#x8B6F;&#x8A3B;: &#x4E0A;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x5728; Windows &#x7684;&#x547D;&#x4EE4;&#x884C;&#x904B;&#x884C;&#x6703;&#x9047;&#x5230; <code>template: main:1: unclosed action</code> &#x7684;&#x932F;&#x8AA4;. &#x7523;&#x751F;&#x932F;&#x8AA4;&#x7684;&#x539F;&#x56E0;&#x662F;&#x56E0;&#x7232;&#x547D;&#x4EE4;&#x884C;&#x5C0D;&#x91CC;&#x9762;&#x7684; <code>&quot; &quot;</code> &#x53C3;&#x6578;&#x9032;&#x884C;&#x8F49;&#x7FA9;&#x4E86;. &#x6309;&#x7167;&#x4E0B;&#x9762;&#x7684;&#x65B9;&#x6CD5;&#x89E3;&#x6C7A;&#x8F49;&#x7FA9;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x554F;&#x984C;:</p>
<pre><code>$ go list -f &quot;{{join .Deps \&quot; \&quot;}}&quot; strconv
</code></pre><p>&#x4E0B;&#x9EAB;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; compress &#x5B50;&#x76EE;&#x5F54;&#x4E0B;&#x6240;&#x6709;&#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x5305;&#x5217;&#x9336;:</p>
</code></pre><p>&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6253;&#x5370; compress &#x5B50;&#x76EE;&#x9332;&#x4E0B;&#x6240;&#x6709;&#x5305;&#x7684;&#x4F9D;&#x8CF4;&#x5305;&#x5217;&#x8868;:</p>
<pre><code>$ go list -f &apos;{{.ImportPath}} -&gt; {{join .Imports &quot; &quot;}}&apos; compress/...
compress/bzip2 -&gt; bufio io sort
compress/flate -&gt; bufio fmt io math sort strconv
compress/gzip -&gt; bufio compress/flate errors fmt hash hash/crc32 io time
compress/lzw -&gt; bufio errors fmt io
compress/zlib -&gt; bufio compress/flate errors fmt hash hash/adler32 io
</code></pre><p>&#x8B6F;&#x8A3B;: Windows &#x4E0B;&#x8855;&#x6A23;&#x6709;&#x554F;&#x984C;, &#x8981;&#x907F;&#x514D;&#x8F49;&#x7FA9;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x554F;&#x984C;: </p>
</code></pre><p>&#x8B6F;&#x8A3B;: Windows &#x4E0B;&#x540C;&#x6A23;&#x6709;&#x554F;&#x984C;, &#x8981;&#x907F;&#x514D;&#x8F49;&#x7FA9;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x554F;&#x984C;: </p>
<pre><code>$ go list -f &quot;{{.ImportPath}} -&gt; {{join .Imports \&quot; \&quot;}}&quot; compress/...
</code></pre><p>go list &#x547D;&#x4EE4;&#x5C0D;&#x65BC;&#x4E00;&#x6B21;&#x6027;&#x7684;&#x4EA4;&#x4E92;&#x5F0F;&#x67FB;&#x8A62;&#x6216;&#x81EA;&#x52D5;&#x5316;&#x69CB;&#x5EFA;&#x548C;&#x6E2C;&#x8A66;&#x8173;&#x672C;&#x90FD;&#x5F88;&#x6709;&#x5E6B;&#x52A9;. &#x6211;&#x5011;&#x5C07;&#x5728; 11.2.4&#x7BC0; &#x4E2D;&#x518D;&#x6B21;&#x4F7F;&#x7528;&#x5B83;. &#x66F4;&#x591A;&#x7684;&#x4FE1;&#x606F;, &#x5305;&#x62EC;&#x53EF;&#x8A2D;&#x7F6E;&#x7684;&#x5B57;&#x6BB5;&#x548C;&#x610F;&#x7FA9;, &#x53EF;&#x4EE5;&#x7528; <code>go help list</code> &#x547D;&#x4EE4;&#x67FB;&#x770B;.</p>
<p>&#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x89E3;&#x91CB;&#x4E86;Go&#x5DE5;&#x5177;&#x7BB1;&#x9664;&#x4E86;&#x6E2C;&#x8A66;&#x547D;&#x4EE4;&#x4E4B;&#x5916;&#x7684;&#x6240;&#x6709;&#x91CD;&#x8981;&#x7684;&#x547D;&#x4EE4;. &#x5728;&#x4E0B;&#x4E00;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x770B;&#x5230;&#x5982;&#x4F55;&#x7528; <code>go test</code> &#x547D;&#x4EE4;&#x53BB;&#x6E2C;&#x8A66;Go&#x7A0B;&#x5E8F;.</p>
<p><strong>&#x7DF4;&#x7FD2;10.4:</strong> &#x5275;&#x5EFA;&#x4E00;&#x500B;&#x5DE5;&#x5177;, &#x6839;&#x64DA;&#x547D;&#x4EE4;&#x884C;&#x6307;&#x5B9A;&#x7684;&#x53C3;&#x6578;, &#x5831;&#x544A;&#x5DE5;&#x4F5C;&#x5340;&#x6240;&#x6709;&#x4F9D;&#x8CF4;&#x6307;&#x5B9A;&#x5305;&#x7684;&#x5176;&#x4ED6;&#x5305;&#x96C6;&#x95A4;. &#x63D0;&#x793A;: &#x4F60;&#x9700;&#x8981;&#x904B;&#x884C; <code>go list</code> &#x547D;&#x4EE4;&#x5169;&#x6B21;, &#x4E00;&#x6B21;&#x7528;&#x65BC;&#x521D;&#x59CB;&#x5316;&#x5305;, &#x4E00;&#x6B21;&#x7528;&#x65BC;&#x6240;&#x6709;&#x5305;. &#x4F60;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x7528; encoding/json (&#xA7;4.5) &#x5305;&#x4F86;&#x5206;&#x6790;&#x8F38;&#x9F63;&#x7684; JSON &#x683C;&#x5F0F;&#x7684;&#x4FE1;&#x606F;.</p>
<p><strong>&#x7DF4;&#x7FD2;10.4:</strong> &#x5275;&#x5EFA;&#x4E00;&#x500B;&#x5DE5;&#x5177;, &#x6839;&#x64DA;&#x547D;&#x4EE4;&#x884C;&#x6307;&#x5B9A;&#x7684;&#x53C3;&#x6578;, &#x5831;&#x544A;&#x5DE5;&#x4F5C;&#x5340;&#x6240;&#x6709;&#x4F9D;&#x8CF4;&#x6307;&#x5B9A;&#x5305;&#x7684;&#x5176;&#x4ED6;&#x5305;&#x96C6;&#x5408;. &#x63D0;&#x793A;: &#x4F60;&#x9700;&#x8981;&#x904B;&#x884C; <code>go list</code> &#x547D;&#x4EE4;&#x5169;&#x6B21;, &#x4E00;&#x6B21;&#x7528;&#x65BC;&#x521D;&#x59CB;&#x5316;&#x5305;, &#x4E00;&#x6B21;&#x7528;&#x65BC;&#x6240;&#x6709;&#x5305;. &#x4F60;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x7528; encoding/json (&#xA7;4.5) &#x5305;&#x4F86;&#x5206;&#x6790;&#x8F38;&#x9F63;&#x7684; JSON &#x683C;&#x5F0F;&#x7684;&#x4FE1;&#x606F;.</p>
</section>

View File

@@ -48,7 +48,7 @@
<body>
<div class="book" data-level="10" data-chapter-title="包和工具" data-filepath="ch10/ch10.md" data-basepath=".." data-revision="Wed Dec 16 2015 10:54:29 GMT+0800 (中国标准时间)">
<div class="book" data-level="10" data-chapter-title="包和工具" data-filepath="ch10/ch10.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,9 +2024,9 @@
<section class="normal" id="section-">
<h1 id="&#x7B2C;&#x5341;&#x7AE0;-&#x5305;&#x548C;&#x5DE5;&#x5177;">&#x7B2C;&#x5341;&#x7AE0; &#x5305;&#x548C;&#x5DE5;&#x5177;</h1>
<p>&#x73FE;&#x5728;&#x96A8;&#x4FBF;&#x4E00;&#x500B;&#x5C0F;&#x7A0B;&#x5E8F;&#x7684;&#x5BE6;&#x73FE;&#x90FD;&#x53EF;&#x80FD;&#x5305;&#x542B;&#x8D85;&#x904E;10000&#x500B;&#x51FD;&#x6578;. &#x7136;&#x5F8C;&#x4F5C;&#x8005;&#x4E00;&#x822C;&#x96BB;&#x9700;&#x8981;&#x8003;&#x616E;&#x5176;&#x4E2D;&#x5F88;&#x5C0F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x548C;&#x505A;&#x5F88;&#x5C11;&#x7684;&#x8A2D;&#x8A08;, &#x56E0;&#x70BA;&#x7D76;&#x5927;&#x90E8;&#x5206;&#x4EE3;&#x78BC;&#x90FD;&#x662F;&#x7531;&#x4ED6;&#x4EBA;&#x7DE8;&#x5BEB;&#x7684;, &#x5B83;&#x5011;&#x901A;&#x904E;&#x985E;&#x4F3C;&#x5305;&#x7684;&#x65B9;&#x5F0F;&#x88AB;&#x91CD;&#x7528;.</p>
<p>Go&#x8A9E;&#x8A00;&#x6709;&#x8D85;&#x904E;100&#x500B;&#x7684;&#x6A19;&#x6E96;&#x5305;, &#x70BA;&#x5927;&#x591A;&#x6578;&#x7684;&#x7A0B;&#x5E8F;&#x63D0;&#x4F9B;&#x4E86;&#x57FA;&#x790E;&#x69CB;&#x4EF6;. &#x5728;Go&#x7684;&#x793E;&#x5340;, &#x6709;&#x5F88;&#x591A;&#x6210;&#x719F;&#x7684;&#x5305;&#x88AB;&#x8A2D;&#x8A08;,&#x5171;&#x4EAB;,&#x91CD;&#x7528;&#x548C;&#x6539;&#x9032;, &#x76EE;&#x524D;&#x5DF2;&#x7D93;&#x9AEE;&#x4F48;&#x4E86;&#x975E;&#x5E38;&#x591A;&#x7684;&#x958B;&#x6E90;&#x5305;, &#x5B83;&#x5011;&#x53EF;&#x4EE5;&#x901A;&#x904E; <a href="http://godoc.org" target="_blank">http://godoc.org</a> &#x6AA2;&#x7D22;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x6F14;&#x793A;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x5DF2;&#x6709;&#x7684;&#x5305;&#x548C;&#x5275;&#x5EFA;&#x65B0;&#x7684;&#x5305;.</p>
<p>Go&#x9084;&#x81EA;&#x5E36;&#x4E86;&#x5DE5;&#x5177;&#x7BB1;, &#x88CF;&#x9EAB;&#x6709;&#x5F88;&#x591A;&#x7528;&#x4F86;&#x7C21;&#x5316;&#x5DE5;&#x4F5C;&#x5340;&#x548C;&#x5305;&#x7BA1;&#x7406;&#x7684;&#x5C0F;&#x5DE5;&#x5177;. &#x5728;&#x672C;&#x8EAB;&#x958B;&#x59CB;&#x7684;&#x6642;&#x5019;, &#x6211;&#x5011;&#x5DF2;&#x7D93;&#x898B;&#x8B58;&#x904E;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x5DE5;&#x5177;&#x7BB1;&#x81EA;&#x5E36;&#x7684;&#x5DE5;&#x5177;&#x4F86;&#x4E0B;&#x8F09;, &#x69CB;&#x4EF6; &#x548C; &#x904B;&#x884C;&#x6211;&#x5011;&#x7684;&#x6F14;&#x793A;&#x7A0B;&#x5E8F;&#x4E86;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x770B;&#x770B;&#x9019;&#x4E9B;&#x5DE5;&#x5177;&#x7684;&#x57FA;&#x672C;&#x8A2D;&#x8A08;&#x7406;&#x8AD6;&#x548C;&#x5690;&#x8A66;&#x66F4;&#x591A;&#x7684;&#x529F;&#x80FD;, &#x4F8B;&#x5982;&#x6253;&#x5370;&#x5DE5;&#x4F5C;&#x5340;&#x4E2D;&#x5305;&#x7684;&#x6587;&#x6A94;&#x548C;&#x67FB;&#x8A62;&#x76F8;&#x95DC;&#x7684;&#x5143;&#x6578;&#x64DA;&#x7B49;. &#x5728;&#x4E0B;&#x4E00;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x63A2;&#x8A0E;&#x63A2;&#x7D22;&#x5305;&#x7684;&#x55AE;&#x5143;&#x6E2C;&#x8A66;&#x7528;&#x6CD5;.</p>
<p>&#x73FE;&#x5728;&#x96A8;&#x4FBF;&#x4E00;&#x500B;&#x5C0F;&#x7A0B;&#x5E8F;&#x7684;&#x5BE6;&#x73FE;&#x90FD;&#x53EF;&#x80FD;&#x5305;&#x542B;&#x8D85;&#x904E;10000&#x500B;&#x51FD;&#x6578;. &#x7136;&#x5F8C;&#x4F5C;&#x8005;&#x4E00;&#x822C;&#x96BB;&#x9700;&#x8981;&#x8003;&#x616E;&#x5176;&#x4E2D;&#x5F88;&#x5C0F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x548C;&#x505A;&#x5F88;&#x5C11;&#x7684;&#x8A2D;&#x8A08;, &#x56E0;&#x7232;&#x7D76;&#x5927;&#x90E8;&#x5206;&#x4EE3;&#x78BC;&#x90FD;&#x662F;&#x7531;&#x4ED6;&#x4EBA;&#x7DE8;&#x5BEB;&#x7684;, &#x5B83;&#x5011;&#x901A;&#x904E;&#x985E;&#x4F3C;&#x5305;&#x7684;&#x65B9;&#x5F0F;&#x88AB;&#x91CD;&#x7528;.</p>
<p>Go&#x8A9E;&#x8A00;&#x6709;&#x8D85;&#x904E;100&#x500B;&#x7684;&#x6A19;&#x6E96;&#x5305;, &#x7232;&#x5927;&#x591A;&#x6578;&#x7684;&#x7A0B;&#x5E8F;&#x63D0;&#x4F9B;&#x4E86;&#x57FA;&#x790E;&#x69CB;&#x4EF6;. &#x5728;Go&#x7684;&#x793E;&#x5340;, &#x6709;&#x5F88;&#x591A;&#x6210;&#x719F;&#x7684;&#x5305;&#x88AB;&#x8A2D;&#x8A08;,&#x5171;&#x4EAB;,&#x91CD;&#x7528;&#x548C;&#x6539;&#x9032;, &#x76EE;&#x524D;&#x5DF2;&#x7D93;&#x767C;&#x5E03;&#x4E86;&#x975E;&#x5E38;&#x591A;&#x7684;&#x958B;&#x6E90;&#x5305;, &#x5B83;&#x5011;&#x53EF;&#x4EE5;&#x901A;&#x904E; <a href="http://godoc.org" target="_blank">http://godoc.org</a> &#x6AA2;&#x7D22;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x6F14;&#x793A;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x5DF2;&#x6709;&#x7684;&#x5305;&#x548C;&#x5275;&#x5EFA;&#x65B0;&#x7684;&#x5305;.</p>
<p>Go&#x9084;&#x81EA;&#x5E36;&#x4E86;&#x5DE5;&#x5177;&#x7BB1;, &#x91CC;&#x9762;&#x6709;&#x5F88;&#x591A;&#x7528;&#x4F86;&#x7C21;&#x5316;&#x5DE5;&#x4F5C;&#x5340;&#x548C;&#x5305;&#x7BA1;&#x7406;&#x7684;&#x5C0F;&#x5DE5;&#x5177;. &#x5728;&#x672C;&#x8EAB;&#x958B;&#x59CB;&#x7684;&#x6642;&#x5019;, &#x6211;&#x5011;&#x5DF2;&#x7D93;&#x898B;&#x8B58;&#x904E;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x5DE5;&#x5177;&#x7BB1;&#x81EA;&#x5E36;&#x7684;&#x5DE5;&#x5177;&#x4F86;&#x4E0B;&#x8F09;, &#x69CB;&#x4EF6; &#x548C; &#x904B;&#x884C;&#x6211;&#x5011;&#x7684;&#x6F14;&#x793A;&#x7A0B;&#x5E8F;&#x4E86;. &#x5728;&#x672C;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x770B;&#x770B;&#x9019;&#x4E9B;&#x5DE5;&#x5177;&#x7684;&#x57FA;&#x672C;&#x8A2D;&#x8A08;&#x7406;&#x8AD6;&#x548C;&#x5690;&#x8A66;&#x66F4;&#x591A;&#x7684;&#x529F;&#x80FD;, &#x4F8B;&#x5982;&#x6253;&#x5370;&#x5DE5;&#x4F5C;&#x5340;&#x4E2D;&#x5305;&#x7684;&#x6587;&#x6A94;&#x548C;&#x67FB;&#x8A62;&#x76F8;&#x95DC;&#x7684;&#x5143;&#x6578;&#x64DA;&#x7B49;. &#x5728;&#x4E0B;&#x4E00;&#x7AE0;, &#x6211;&#x5011;&#x5C07;&#x63A2;&#x8A0E;&#x63A2;&#x7D22;&#x5305;&#x7684;&#x55AE;&#x5143;&#x6E2C;&#x8A66;&#x7528;&#x6CD5;.</p>
</section>
@@ -2073,7 +2037,7 @@
</div>
<a href="../ch9/ch9-08.html" class="navigation navigation-prev " aria-label="Previous page: Goroutines和程"><i class="fa fa-angle-left"></i></a>
<a href="../ch9/ch9-08.html" class="navigation navigation-prev " aria-label="Previous page: Goroutines和程"><i class="fa fa-angle-left"></i></a>
<a href="../ch10/ch10-01.html" class="navigation navigation-next " aria-label="Next page: 簡介"><i class="fa fa-angle-right"></i></a>