From 775502e64da5207b2b7cb37d0f2cb22ee0069229 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Mon, 28 Dec 2015 16:08:26 +0800 Subject: [PATCH 1/7] rebuild --- CONTRIBUTORS.html | 18 +- README.md | 5 +- ch0/ch0-01.html | 18 +- ch0/ch0-02.html | 22 ++- ch0/ch0-03.html | 22 ++- ch0/ch0-04.html | 20 +- ch0/ch0-05.html | 22 ++- ch1/ch1-01.html | 26 +-- ch1/ch1-02.html | 34 ++-- ch1/ch1-03.html | 42 +++-- ch1/ch1-04.html | 30 +-- ch1/ch1-05.html | 30 +-- ch1/ch1-06.html | 32 ++-- ch1/ch1-07.html | 38 ++-- ch1/ch1-08.html | 22 ++- ch1/ch1.html | 22 ++- ch10/ch10-01.html | 22 ++- ch10/ch10-02.html | 20 +- ch10/ch10-03.html | 18 +- ch10/ch10-04.html | 18 +- ch10/ch10-05.html | 22 ++- ch10/ch10-06.html | 20 +- ch10/ch10-07.html | 54 +++--- ch10/ch10.html | 18 +- ch11/ch11-01.html | 18 +- ch11/ch11-02.html | 68 +++---- ch11/ch11-03.html | 20 +- ch11/ch11-04.html | 20 +- ch11/ch11-05.html | 24 ++- ch11/ch11-06.html | 20 +- ch11/ch11.html | 20 +- ch12/ch12-01.html | 20 +- ch12/ch12-02.html | 22 ++- ch12/ch12-03.html | 18 +- ch12/ch12-04.html | 18 +- ch12/ch12-05.html | 18 +- ch12/ch12-06.html | 20 +- ch12/ch12-07.html | 22 ++- ch12/ch12-08.html | 20 +- ch12/ch12-09.html | 18 +- ch12/ch12.html | 18 +- ch13/ch13-01.html | 22 ++- ch13/ch13-02.html | 20 +- ch13/ch13-03.html | 22 ++- ch13/ch13-04.html | 32 ++-- ch13/ch13-05.html | 20 +- ch13/ch13.html | 22 ++- ch2/ch2-01.html | 48 ++--- ch2/ch2-02.html | 29 +-- ch2/ch2-03.html | 158 ++++++++-------- ch2/ch2-04.html | 75 ++++---- ch2/ch2-05.html | 67 +++---- ch2/ch2-06.html | 93 +++++----- ch2/ch2-07.html | 69 +++---- ch2/ch2.html | 22 ++- ch3/ch3-01.html | 94 +++++----- ch3/ch3-02.html | 66 +++---- ch3/ch3-03.html | 42 +++-- ch3/ch3-04.html | 28 +-- ch3/ch3-05.html | 172 +++++++++--------- ch3/ch3-06.html | 78 ++++---- ch3/ch3.html | 22 ++- ch4/ch4-01.html | 107 ++++++++++- ch4/ch4-02.html | 22 ++- ch4/ch4-03.html | 18 +- ch4/ch4-04.html | 24 ++- ch4/ch4-05.html | 18 +- ch4/ch4-06.html | 18 +- ch4/ch4.html | 21 ++- ch5/ch5-01.html | 18 +- ch5/ch5-02.html | 18 +- ch5/ch5-03.html | 18 +- ch5/ch5-04.html | 18 +- ch5/ch5-05.html | 18 +- ch5/ch5-06.html | 18 +- ch5/ch5-07.html | 18 +- ch5/ch5-08.html | 18 +- ch5/ch5-09.html | 20 +- ch5/ch5-10.html | 22 ++- ch5/ch5.html | 18 +- ch6/ch6-01.html | 20 +- ch6/ch6-02.html | 24 ++- ch6/ch6-03.html | 20 +- ch6/ch6-04.html | 18 +- ch6/ch6-05.html | 24 ++- ch6/ch6-06.html | 24 ++- ch6/ch6.html | 20 +- ch7/ch7-01.html | 28 +-- ch7/ch7-02.html | 18 +- ch7/ch7-03.html | 18 +- ch7/ch7-04.html | 18 +- ch7/ch7-05.html | 18 +- ch7/ch7-06.html | 18 +- ch7/ch7-07.html | 18 +- ch7/ch7-08.html | 18 +- ch7/ch7-09.html | 18 +- ch7/ch7-10.html | 18 +- ch7/ch7-11.html | 18 +- ch7/ch7-12.html | 18 +- ch7/ch7-13.html | 18 +- ch7/ch7-14.html | 18 +- ch7/ch7-15.html | 18 +- ch7/ch7.html | 18 +- ch8/ch8-01.html | 24 ++- ch8/ch8-02.html | 30 +-- ch8/ch8-03.html | 18 +- ch8/ch8-04.html | 18 +- ch8/ch8-05.html | 18 +- ch8/ch8-06.html | 32 ++-- ch8/ch8-07.html | 18 +- ch8/ch8-08.html | 32 ++-- ch8/ch8-09.html | 34 ++-- ch8/ch8-10.html | 30 +-- ch8/ch8.html | 20 +- ch9/ch9-01.html | 18 +- ch9/ch9-02.html | 18 +- ch9/ch9-03.html | 18 +- ch9/ch9-04.html | 18 +- ch9/ch9-05.html | 18 +- ch9/ch9-06.html | 18 +- ch9/ch9-07.html | 18 +- ch9/ch9-08.html | 18 +- ch9/ch9.html | 18 +- .../fonts/KaTeX_AMS-Regular.eot | Bin 0 -> 71656 bytes .../fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 71428 bytes .../fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 40200 bytes .../fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 33188 bytes .../fonts/KaTeX_Caligraphic-Bold.eot | Bin 0 -> 19836 bytes .../fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19588 bytes .../fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 12136 bytes .../fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10604 bytes .../fonts/KaTeX_Caligraphic-Regular.eot | Bin 0 -> 19220 bytes .../fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18960 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11868 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10396 bytes .../fonts/KaTeX_Fraktur-Bold.eot | Bin 0 -> 36200 bytes .../fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35968 bytes .../fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 23388 bytes .../fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20476 bytes .../fonts/KaTeX_Fraktur-Regular.eot | Bin 0 -> 34896 bytes .../fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34652 bytes .../fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22844 bytes .../fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19868 bytes .../fonts/KaTeX_Main-Bold.eot | Bin 0 -> 60688 bytes .../fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60468 bytes .../fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35480 bytes .../fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 29492 bytes .../fonts/KaTeX_Main-Italic.eot | Bin 0 -> 44132 bytes .../fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 43904 bytes .../fonts/KaTeX_Main-Italic.woff | Bin 0 -> 24880 bytes .../fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 21032 bytes .../fonts/KaTeX_Main-Regular.eot | Bin 0 -> 68228 bytes .../fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 67996 bytes .../fonts/KaTeX_Main-Regular.woff | Bin 0 -> 37620 bytes .../fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 31220 bytes .../fonts/KaTeX_Math-BoldItalic.eot | Bin 0 -> 39990 bytes .../fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39744 bytes .../fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 23192 bytes .../fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 20036 bytes .../fonts/KaTeX_Math-Italic.eot | Bin 0 -> 41676 bytes .../fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 41448 bytes .../fonts/KaTeX_Math-Italic.woff | Bin 0 -> 23820 bytes .../fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20432 bytes .../fonts/KaTeX_Math-Regular.eot | Bin 0 -> 41536 bytes .../fonts/KaTeX_Math-Regular.ttf | Bin 0 -> 41304 bytes .../fonts/KaTeX_Math-Regular.woff | Bin 0 -> 23712 bytes .../fonts/KaTeX_Math-Regular.woff2 | Bin 0 -> 20344 bytes .../fonts/KaTeX_SansSerif-Bold.eot | Bin 0 -> 34204 bytes .../fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33964 bytes .../fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 19196 bytes .../fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 16020 bytes .../fonts/KaTeX_SansSerif-Italic.eot | Bin 0 -> 31320 bytes .../fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 31072 bytes .../fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 18080 bytes .../fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15152 bytes .../fonts/KaTeX_SansSerif-Regular.eot | Bin 0 -> 30212 bytes .../fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29960 bytes .../fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16744 bytes .../fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13908 bytes .../fonts/KaTeX_Script-Regular.eot | Bin 0 -> 25104 bytes .../fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24864 bytes .../fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13856 bytes .../fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12276 bytes .../fonts/KaTeX_Size1-Regular.eot | Bin 0 -> 13408 bytes .../fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 13172 bytes .../fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6980 bytes .../fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5820 bytes .../fonts/KaTeX_Size2-Regular.eot | Bin 0 -> 12648 bytes .../fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12412 bytes .../fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6684 bytes .../fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5560 bytes .../fonts/KaTeX_Size3-Regular.eot | Bin 0 -> 8596 bytes .../fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8360 bytes .../fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4776 bytes .../fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3856 bytes .../fonts/KaTeX_Size4-Regular.eot | Bin 0 -> 11520 bytes .../fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11284 bytes .../fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6456 bytes .../fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5172 bytes .../fonts/KaTeX_Typewriter-Regular.eot | Bin 0 -> 35784 bytes .../fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35528 bytes .../fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20712 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17344 bytes .../gitbook-plugin-katex/katex.min.css | 1 + index.html | 23 ++- progress.md | 4 +- 206 files changed, 2064 insertions(+), 1460 deletions(-) create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.eot create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 gitbook/plugins/gitbook-plugin-katex/katex.min.css diff --git a/CONTRIBUTORS.html b/CONTRIBUTORS.html index 406390c..bb6ae46 100644 --- a/CONTRIBUTORS.html +++ b/CONTRIBUTORS.html @@ -21,6 +21,10 @@ + + + + @@ -42,7 +46,7 @@ -
+
@@ -236,7 +240,7 @@ 1.5. - 穫取URL + 獲取URL @@ -251,7 +255,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -800,7 +804,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1313,7 +1317,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1832,7 +1836,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2084,7 +2088,7 @@ diff --git a/README.md b/README.md index 1f01f40..788f1ce 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # Go語言聖經(中文版) -Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本,僅供編程和英語學習交流之用,請在下載後24小時內刪除。 +Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本,僅供編程、英語學習、Gitbook、Markdown等學習交流之用。 - 項目主頁:http://github.com/golang-china/gopl-zh - 項目進度:http://github.com/golang-china/gopl-zh/blob/master/progress.md - 參與人員:http://github.com/golang-china/gopl-zh/blob/master/CONTRIBUTORS.md +- 離線版本:http://github.com/golang-china/gopl-zh/archive/gh-pages.zip - 在線預覽:http://golang-china.github.io/gopl-zh - 原版官網:http://gopl.io @@ -15,7 +16,7 @@ Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本 先安裝Go語言環境,Git工具和GitBook命令行工具(`npm install gitbook-cli -g`命令)。 -1. 運行`go get github.com/golang-china/gopl-zh`,穫取源文件。 +1. 運行`go get github.com/golang-china/gopl-zh`,獲取源文件。 2. 運行`go generate github.com/golang-china/gopl-zh`,生成`_book`目録。 3. 打開`_book/index.html`文件。 diff --git a/ch0/ch0-01.html b/ch0/ch0-01.html index 6cf3c9a..cc927fb 100644 --- a/ch0/ch0-01.html +++ b/ch0/ch0-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2060,7 +2064,7 @@ diff --git a/ch0/ch0-02.html b/ch0/ch0-02.html index 6a9127a..82d087a 100644 --- a/ch0/ch0-02.html +++ b/ch0/ch0-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2022,11 +2026,11 @@

Go語言項目

所有的編程語言都反映了語言設計者對編程哲學的反思,通常包括之前的語言所暴露的一些不足地方的改進。Go項目是在Google公司維護超級複雜的幾個軟件繫統遇到的一些問題的反思(但是這類問題絶不是Google公司所特有的)。

正如Rob Pike所説,“軟件的複雜性是乘法級相關的”,通過增加一個部分的複雜性來脩複問題通常將慢慢地增加其他部分的複雜性。通過增加功能和選項和配置是脩複問題的最快的途徑,但是這很容易讓人忘記簡潔的內涵,卽使從長遠來看,簡潔依然是好軟件的關鍵因素。

-

簡潔的設計需要在工作開始的時候舍棄不必要的想法,併且在軟件的生命週期內嚴格區别好的改變或壞的改變。通過足夠的努力,一個好的改變可以在不破壞原有完整概念的前提下保持自適應,正如Fred Brooks所説的“概念完整性”;而一個壞的改變則不能達到這個效果,它們僅僅是通過膚淺的和簡單的妥協來破壞原有設計的一致性。隻有通過簡潔的設計,纔能讓一個繫統保持穩定、安全和持續的進化。

+

簡潔的設計需要在工作開始的時候舍棄不必要的想法,併且在軟件的生命週期內嚴格區别好的改變或壞的改變。通過足夠的努力,一個好的改變可以在不破壞原有完整概念的前提下保持自適應,正如Fred Brooks所説的“概念完整性”;而一個壞的改變則不能達到這個效果,它們僅僅是通過膚淺的和簡單的妥協來破壞原有設計的一致性。隻有通過簡潔的設計,才能讓一個繫統保持穩定、安全和持續的進化。

Go項目包括編程語言本身,附帶了相關的工具和標準庫,最後但併非代表不重要的,關於簡潔編程哲學的宣言。就事後諸葛的角度來看,Go語言的這些地方都做的還不錯:擁有自動垃圾迴收、一個包繫統、函數作爲一等公民、詞法作用域、繫統調用接口、隻讀的UTF8字符串等。但是Go語言本身隻有很少的特性,也不太可能添加太多的特性。例如,它沒有隱式的數值轉換,沒有構造函數和析構函數,沒有運算符重載,沒有默認參數,也沒有繼承,沒有泛型,沒有異常,沒有宏,沒有函數脩飾,更沒有線程局部存儲。但是語言本身是成熟和穩定的,而且承諾保證向後兼容:用之前的Go語言編寫程序可以用新版本的Go語言編譯器和標準庫直接構建而不需要脩改代碼。

Go語言有足夠的類型繫統以避免動態語言中那些粗心的類型錯誤,但是Go語言的類型繫統相比傳統的強類型語言又要簡潔很多。雖然有時候這會導致一個“無類型”的抽象類型概念,但是Go語言程序員併不需要像C++或Haskell程序員那樣糾結於具體類型的安全屬性。在實踐中Go語言簡潔的類型繫統給了程序員帶來了更多的安全性和更好的運行時性能。

Go語言鼓勵當代計算機繫統設計的原則,特别是局部的重要性。它的內置數據類型和大多數的準庫數據結構都經過精心設計而避免顯式的初始化或隱式的構造函數,因爲很少的內存分配和內存初始化代碼被隱藏在庫代碼中了。Go語言的聚合類型(結構體和數組)可以直接操作它們的元素,隻需要更少的存儲空間、更少的內存分配,而且指針操作比其他間接操作的語言也更有效率。由於現代計算機是一個併行的機器,Go語言提供了基於CSP的併發特性支持。Go語言的動態棧使得輕量級線程goroutine的初始棧可以很小,因此創建一個goroutine的代價很小,創建百萬級的goroutine完全是可行的。

-

Go語言的標準庫(通常被稱爲語言自帶的電池),提供了清晰的構建模塊和公共接口,包含I/O操作、文本處理、圖像、密碼學、網絡和分布式應用程序等,併支持許多標準化的文件格式和編解碼協議。庫和工具使用了大量的約定來減少額外的配置和解釋,從而最終簡化程序的邏輯,而且每個Go程序結構都是如此的相似,因此Go程序也很容易學習。使用Go語言自帶工具構建Go語言項目隻需要使用文件名和標識符名稱, 一個偶爾的特殊註釋來確定所有的庫、可執行文件、測試、基準測試、例子、以及特定於平颱的變量、項目的文檔等;Go語言源代碼本身就包含了構建規范。

+

Go語言的標準庫(通常被稱爲語言自帶的電池),提供了清晰的構建模塊和公共接口,包含I/O操作、文本處理、圖像、密碼學、網絡和分布式應用程序等,併支持許多標準化的文件格式和編解碼協議。庫和工具使用了大量的約定來減少額外的配置和解釋,從而最終簡化程序的邏輯,而且每個Go程序結構都是如此的相似,因此Go程序也很容易學習。使用Go語言自帶工具構建Go語言項目隻需要使用文件名和標識符名稱, 一個偶爾的特殊註釋來確定所有的庫、可執行文件、測試、基準測試、例子、以及特定於平台的變量、項目的文檔等;Go語言源代碼本身就包含了構建規范。

@@ -2058,7 +2062,7 @@ diff --git a/ch0/ch0-03.html b/ch0/ch0-03.html index 30b79c4..f5c6d66 100644 --- a/ch0/ch0-03.html +++ b/ch0/ch0-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2030,10 +2034,10 @@

第十一章討論了單元測試,Go語言的工具和標準庫中集成的輕量級的測試功能,從而避免了采用強大但複雜的測試框架。測試庫提供一些基本的構件,如果有必要可以用來構建更複雜的測試構件。

第十二章討論了反射,一個程序在運行期間來審視自己的能力。反射是一個強大的編程工具,不過要謹慎地使用;這一章通過用利用反射機製實現一些重要的Go語言庫函數來展示了反射的強大用法。第十三章解釋了底層編程的細節,通過使用unsafe包來繞過Go語言安全的類型繫統,當然有時這是必要的。

有些章節的後面可能會有一些練習,你可以根據你對Go語言的理解,然後脩改書中的例子來探索Go語言的其他用法。

-

書中所有的代碼都可以從 http://gopl.io 上的Git倉庫下載。go get命令可以根據每個例子的其導入路徑智能地穫取、構建併安裝。你隻需要選擇一個目録作爲工作空間,然後將GOPATH環境指向這個工作目録。

+

書中所有的代碼都可以從 http://gopl.io 上的Git倉庫下載。go get命令可以根據每個例子的其導入路徑智能地獲取、構建併安裝。你隻需要選擇一個目録作爲工作空間,然後將GOPATH環境指向這個工作目録。

Go語言工具將在必要時創建的相應的目録。例如:

$ export GOPATH=$HOME/gobook    # 選擇工作目録
-$ go get gopl.io/ch1/helloworld # 穫取/編譯/安裝
+$ go get gopl.io/ch1/helloworld # 獲取/編譯/安裝
 $ $GOPATH/bin/helloworld        # 運行程序
 Hello, 世界                     # 這是中文
 

要運行這些例子, 你需要安裝Go1.5以上的版本.

@@ -2071,7 +2075,7 @@ go version go1.5 linux/amd64 diff --git a/ch0/ch0-04.html b/ch0/ch0-04.html index c425049..5f3d87b 100644 --- a/ch0/ch0-04.html +++ b/ch0/ch0-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2025,7 +2029,7 @@

Playground可以簡單的通過執行一個小程序來測試對語法、語義和對程序庫的理解,類似其他很多語言提供的REPL卽時運行的工具。同時它可以生成對應的url,非常適合共享Go語言代碼片段,滙報bug或提供反饋意見等。

基於 Playground 構建的 Go Tour,https://tour.golang.org ,是一個繫列的Go語言入門敎程,它包含了諸多基本概念和結構相關的併可在線運行的互動小程序。

當然,Playground 和 Tour 也有一些限製,它們隻能導入標準庫,而且因爲安全的原因對一些網絡庫做了限製。如果要在編譯和運行時需要訪問互聯網,對於一些更複製的實驗,你可能需要在自己的電腦上構建併運行程序。幸運的是下載Go語言的過程很簡單,從 https://golang.org 下載安裝包應該不超過幾分鐘(譯註:感謝偉大的長城,讓大陸的Gopher們都學會了自己打洞的基本生活技能,下載時間可能會因爲洞的大小等因素從幾分鐘到幾天或更久),然後就可以在自己電腦上編寫和運行Go程序了。

-

Go語言是一個開源項目,你可以在 https://golang.org/pkg 閲讀標準庫中任意函數和類型的實現代碼,和下載安裝包的代碼完全一致。這樣你可以知道很多函數是如何工作的, 通過挖掘找齣一些答案的細節,或者僅僅是齣於欣賞專業級Go代碼。

+

Go語言是一個開源項目,你可以在 https://golang.org/pkg 閲讀標準庫中任意函數和類型的實現代碼,和下載安裝包的代碼完全一致。這樣你可以知道很多函數是如何工作的, 通過挖掘找出一些答案的細節,或者僅僅是出於欣賞專業級Go代碼。

@@ -2057,7 +2061,7 @@ diff --git a/ch0/ch0-05.html b/ch0/ch0-05.html index dfe2227..22f4824 100644 --- a/ch0/ch0-05.html +++ b/ch0/ch0-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

致謝

-

Rob Pike和Russ Cox,以及很多其他Go糰隊的覈心成員多次仔細閲讀了本書的手稿,他們對本書的組織結構和表述用詞等給齣了很多寶貴的建議。在準備日文版翻譯的時候,Yoshiki Shibata更是仔細地審閲了本書的每個部分,及時發現了諸多英文和代碼的錯誤。我們非常感謝本書的每一位審閲者,併感謝對本書給齣了重要的建議的Brian Goetz、Corey Kosak、Arnold Robbins、Josh Bleecher Snyder和Peter Weinberger等人。

-

我們還感謝Sameer Ajmani、Ittai Balaban、David Crawshaw、Billy Donohue、Jonathan Feinberg、Andrew Gerrand、Robert Griesemer、John Linderman、Minux Ma(譯註:中國人,Go糰隊成員。)、Bryan Mills、Bala Natarajan、Cosmos Nicolaou、Paul Staniforth、Nigel Tao(譯註:好像是陶哲軒的兄弟)以及Howard Trickey給齣的許多有價值的建議。我們還要感謝David Brailsford和Raph Levien關於類型設置的建議。

+

Rob Pike和Russ Cox,以及很多其他Go糰隊的覈心成員多次仔細閲讀了本書的手稿,他們對本書的組織結構和表述用詞等給出了很多寶貴的建議。在準備日文版翻譯的時候,Yoshiki Shibata更是仔細地審閲了本書的每個部分,及時發現了諸多英文和代碼的錯誤。我們非常感謝本書的每一位審閲者,併感謝對本書給出了重要的建議的Brian Goetz、Corey Kosak、Arnold Robbins、Josh Bleecher Snyder和Peter Weinberger等人。

+

我們還感謝Sameer Ajmani、Ittai Balaban、David Crawshaw、Billy Donohue、Jonathan Feinberg、Andrew Gerrand、Robert Griesemer、John Linderman、Minux Ma(譯註:中国人,Go糰隊成員。)、Bryan Mills、Bala Natarajan、Cosmos Nicolaou、Paul Staniforth、Nigel Tao(譯註:好像是陶哲軒的兄弟)以及Howard Trickey給出的許多有價值的建議。我們還要感謝David Brailsford和Raph Levien關於類型設置的建議。

我們的來自Addison-Wesley的編輯Greg Doench收到了很多幫助,從最開始就得到了越來越多的幫助。來自AW生産糰隊的John Fuller、Dayna Isley、Julie Nahil、Chuti Prasertsith到Barbara Wood,感謝你們的熱心幫助。

Alan Donovan特别感謝:Sameer Ajmani、Chris Demetriou、Walt Drummond和Google公司的Reid Tatge允許他有充裕的時間去寫本書;感謝Stephen Donovan的建議和始終如一的鼓勵,以及他的妻子Leila Kazemi併沒有讓他爲了家庭瑣事而分心,併熱情堅定地支持這個項目。

Brian Kernighan特别感謝:朋友和同事對他的耐心和寬容,讓他慢慢地梳理本書的寫作思路。同時感謝他的妻子Meg和其他很多朋友對他寫作事業的支持。

@@ -2057,7 +2061,7 @@ diff --git a/ch1/ch1-01.html b/ch1/ch1-01.html index b21de5b..6b56595 100644 --- a/ch1/ch1-01.html +++ b/ch1/ch1-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,7 +2024,7 @@

1.1. Hello, World

-

我們以1978年齣版的C語言聖經《The C Programming Language》中經典的“hello world”案例來開始吧(譯註:本書作者之一Brian W. Kernighan也是C語言聖經一書的作者)。C語言對Go語言的設計産生了很多影響。用這個例子,我們來講解一些Go語言的覈心特性:

+

我們以1978年出版的C語言聖經《The C Programming Language》中經典的“hello world”案例來開始吧(譯註:本書作者之一Brian W. Kernighan也是C語言聖經一書的作者)。C語言對Go語言的設計産生了很多影響。用這個例子,我們來講解一些Go語言的覈心特性:

gopl.io/ch1/helloworld
 package main
 
@@ -2032,7 +2036,7 @@
 

Go是一門編譯型語言,Go語言的工具鏈將源代碼和其依賴一起打包,生成機器的本地指令(譯註:靜態編譯)。Go語言提供的工具可以通過go命令下的一繫列子命令來調用。最簡單的一個子命令就是run。這個命令會將一個或多個文件名以.go結尾的源文件,和關聯庫鏈接到一起,然後運行最終的可執行文件。(本書將用$表示命令行的提示符。)

$ go run helloworld.go
-

毫無意外,這個命令會輸齣:

+

毫無意外,這個命令會輸出:

Hello, 世界
 

Go語言原生支持Unicode標準,所以你可以用Go語言處理世界上的任何自然語言。

如果你希望自己的程序不隻是簡單的一次性實驗,那麽你一定會希望能夠編譯這個程序,併且能夠將編譯結果保存下來以備將來之用。這個可以用build子命令來實現:

@@ -2043,9 +2047,9 @@ Hello, 世界

本書中我們所有的例子都做了一個特殊標記,你可以通過這些標記在 http://gopl.io 在線網站上找到這些樣例代碼,比如這個

gopl.io/ch1/helloworld
-

如果你執行 go get gopl.io/ch1/helloworld 命令,go命令能夠自己從網上穫取到這些代碼(譯註:需要先安裝Git或Hg之類的版本管理工具,併將對應的命令添加到PATH環境變量中),併且將這些代碼放到對應的目録中(譯註:序言已經提及,需要先設置好GOPATH環境變量,下載的代碼會放在 $GOPATH/src/gopl.io/ch1/helloworld 目録)。更詳細的介紹在2.6和10.7章節中。

+

如果你執行 go get gopl.io/ch1/helloworld 命令,go命令能夠自己從網上獲取到這些代碼(譯註:需要先安裝Git或Hg之類的版本管理工具,併將對應的命令添加到PATH環境變量中),併且將這些代碼放到對應的目録中(譯註:序言已經提及,需要先設置好GOPATH環境變量,下載的代碼會放在 $GOPATH/src/gopl.io/ch1/helloworld 目録)。更詳細的介紹在2.6和10.7章節中。

我們來討論一下程序本身。Go語言的代碼是通過package來組織的,package的概念和你知道的其它語言里的libraries或者modules概念比較類似。一個package會包含一個或多個.go結束的源代碼文件。每一個源文件都是以一個package xxx的聲明語句開頭的,比如我們的例子里就是package main。這行聲明語句表示該文件是屬於哪一個package,緊跟着是一繫列import的package名,表示這個文件中引入的package。再之後是本文件本身的代碼。

-

Go的標準庫已經提供了100多個package,用來完成一門程序語言的一些常見的基本任務,比如輸入、輸齣、排序或者字符串/文本處理。比如fmt這個package,就包括接收輸入、格式化輸齣的各種函數。Println是其中的一個常用的函數,可以用這個函數來打印一個或多個值,該函數會將這些參數用空格隔開進行輸齣,併在輸齣完畢之後在行末加上一個換行符。

+

Go的標準庫已經提供了100多個package,用來完成一門程序語言的一些常見的基本任務,比如輸入、輸出、排序或者字符串/文本處理。比如fmt這個package,就包括接收輸入、格式化輸出的各種函數。Println是其中的一個常用的函數,可以用這個函數來打印一個或多個值,該函數會將這些參數用空格隔開進行輸出,併在輸出完畢之後在行末加上一個換行符。

package main是一個比較特殊的package。這個package里會定義一個獨立的程序,這個程序是可以運行的,而不是像其它package一樣對應一個library。在main這個package里,main函數也是一個特殊的函數,這是我們整個程序的入口(譯註:其實C繫語言差不多都是這樣)。main函數所做的事情就是我們程序做的事情。當然了,main函數一般是通過是調用其它packge里的函數來完成自己的工作,比如fmt.Println。

我們必鬚告訴編譯器如何要正確地執行這個源文件,需要用到哪些package,這就是import在這個文件里扮演的角色。上述的hello world例子隻用到了一個其它的package,就是fmt。一般情況下,需要import的package可能不隻一個。

這也正是因爲go語言必鬚引入所有要用到的package的原則,假如你沒有在代碼里import需要用到的package,程序將無法編譯通過,同時當你import了沒有用到的package,也會無法編譯通過(譯註:Go語言編譯過程沒有警告信息,爭議特性之一)。

@@ -2087,7 +2091,7 @@ Hello, 世界 diff --git a/ch1/ch1-02.html b/ch1/ch1-02.html index c4696a6..8017d2a 100644 --- a/ch1/ch1-02.html +++ b/ch1/ch1-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,11 +2024,11 @@

1.2. 命令行參數

-

大多數的程序都是處理輸入,産生輸齣;這也正是“計算”的定義。但是一個程序要如何穫取輸入呢?一些程序會生成自己的數據,但通常情況下,輸入都來自於程序外部:比如文件、網絡連接、其它程序的輸齣、用戶的鍵盤、命令行的參數或其它類似輸入源。下面幾個例子會討論其中的一些輸入類型,首先是命令行參數。

-

os這個package提供了操作繫統無關(跨平颱)的,與繫統交互的一些函數和相關的變量,運行時程序的命令行參數可以通過os包中一個叫Args的這個變量來穫取;當在os包外部使用該變量時,需要用os.Args來訪問。

-

os.Args這個變量是一個字符串(string)的slice(譯註:slice和Python語言中的切片類似,是一個簡版的動態數組),slice在Go語言里是一個基礎的數據結構,之後我們很快會提到。現在可以先把slice當一個簡單的元素序列,可以用類似s[i]的下標訪問形式穫取其內容,併且可以用形如s[m:n]的形式來穫取到一個slice的子集(譯註:和python里的語法差不多)。其長度可以用len(s)函數來穫取。和其它大多數編程語言類似,Go語言里的這種索引形式也采用了左閉右開區間,包括m~n的第一個元素,但不包括最後那個元素(譯註:比如a = [1, 2, 3, 4, 5], a[0:3] = [1, 2, 3],不包含最後一個元素)。這樣可以簡化我們的處理邏輯。比如s[m:n]這個slice,0 ≤ m ≤ n ≤ len(s),包含n-m個元素。

+

大多數的程序都是處理輸入,産生輸出;這也正是“計算”的定義。但是一個程序要如何獲取輸入呢?一些程序會生成自己的數據,但通常情況下,輸入都來自於程序外部:比如文件、網絡連接、其它程序的輸出、用戶的鍵盤、命令行的參數或其它類似輸入源。下面幾個例子會討論其中的一些輸入類型,首先是命令行參數。

+

os這個package提供了操作繫統無關(跨平台)的,與繫統交互的一些函數和相關的變量,運行時程序的命令行參數可以通過os包中一個叫Args的這個變量來獲取;當在os包外部使用該變量時,需要用os.Args來訪問。

+

os.Args這個變量是一個字符串(string)的slice(譯註:slice和Python語言中的切片類似,是一個簡版的動態數組),slice在Go語言里是一個基礎的數據結構,之後我們很快會提到。現在可以先把slice當一個簡單的元素序列,可以用類似s[i]的下標訪問形式獲取其內容,併且可以用形如s[m:n]的形式來獲取到一個slice的子集(譯註:和python里的語法差不多)。其長度可以用len(s)函數來獲取。和其它大多數編程語言類似,Go語言里的這種索引形式也采用了左閉右開區間,包括m~n的第一個元素,但不包括最後那個元素(譯註:比如a = [1, 2, 3, 4, 5], a[0:3] = [1, 2, 3],不包含最後一個元素)。這樣可以簡化我們的處理邏輯。比如s[m:n]這個slice,0 ≤ m ≤ n ≤ len(s),包含n-m個元素。

os.Args的第一個元素,卽os.Args[0]是命令行執行時的命令本身;其它的元素則是執行該命令時傳給這個程序的參數。前面提到的切片表達式,s[m:n]會返迴第m到第n-1個元素,所以下一個例子里需要用到的os.Args[1:len(os.Args)]卽是除了命令本身外的所有傳入參數。如果我們省略s[m:n]里的m和n,那麽默認這個表達式會填入0:len(s),所以這里我們還可以省略掉n,寫成os.Args[1:]。

-

下面是一個Unix里echo命令的實現,這個命令會在單行內打印齣命令行參數。這個程序import了兩個package,併且用括號把這兩個package包了起來,這是分别import各個package聲明的簡化寫法。當然了你分開來寫import也沒有什麽問題,隻是一般爲了方便我們都會像下面這樣來導入多個package。我們自己寫的導入順序併不重要,因爲gofmt工具會幫助我們按照字母順序來排列好這些導入包名。(本書中如果一個例子有多種版本時,我們會用編號標記齣來)

+

下面是一個Unix里echo命令的實現,這個命令會在單行內打印出命令行參數。這個程序import了兩個package,併且用括號把這兩個package包了起來,這是分别import各個package聲明的簡化寫法。當然了你分開來寫import也沒有什麽問題,隻是一般爲了方便我們都會像下面這樣來導入多個package。我們自己寫的導入順序併不重要,因爲gofmt工具會幫助我們按照字母順序來排列好這些導入包名。(本書中如果一個例子有多種版本時,我們會用編號標記出來)

gopl.io/ch1/echo1
 // Echo1 prints its command-line arguments.
 package main
@@ -2056,7 +2060,7 @@
 
s = s + sep + os.Args[i]
 

運算符+=是一個賦值運算符(assignment operator),每一種數值和邏輯運算符,例如*或者+都有其對應的賦值運算符。

-

echo程序可以每循環一次輸齣一個參數,不過我們這里的版本是不斷地將其結果連接到一個字符串的末尾。s這個字符串在聲明的時候是一個空字符串,而之後循環每次都會被在末尾添加一段字符串;第一次迭代之後,一個空格會被插入到字符串末尾,所以每插入一個新值,都會和前一個中間有一個空格隔開。這是一種非線性的操作,當我們的參數數量變得龐大的時候(當然不是説這里的echo,一般echo也不會有太多參數)其運行開銷也會變得龐大。下面我們會介紹一繫列的echo改進版,來應對這里説到的運行效率低下。

+

echo程序可以每循環一次輸出一個參數,不過我們這里的版本是不斷地將其結果連接到一個字符串的末尾。s這個字符串在聲明的時候是一個空字符串,而之後循環每次都會被在末尾添加一段字符串;第一次迭代之後,一個空格會被插入到字符串末尾,所以每插入一個新值,都會和前一個中間有一個空格隔開。這是一種非線性的操作,當我們的參數數量變得龐大的時候(當然不是説這里的echo,一般echo也不會有太多參數)其運行開銷也會變得龐大。下面我們會介紹一繫列的echo改進版,來應對這里説到的運行效率低下。

在for循環中,我們用到了i來做下標索引,可以看到我們用了:=符號來給i進行初始化和賦值,這是var xxx=yyy的一種簡寫形式,Go語言會根據等號右邊的值的類型自動判斷左邊的值類型,下一章會對這一點進行詳細説明。

自增表達式i++會爲i加上1;這和i += 1以及i = i + 1都是等價的。對應的還有i--是給i減去1。這些在Go語言里是語句,而不像C繫的其它語言里是表達式。所以在Go語言里j = i++是非法的,而且++和--都隻能放在變量名後面,因此--i也是非法的。

在Go語言里隻有for循環一種循環。當然了爲了滿足需求,Go的for循環有很多種形式,下面是其中的一種:

@@ -2113,13 +2117,13 @@ fmt.Println(strings.Join(os.Args[1:], " ")) }
-

最後,如果我們對輸齣的格式也不是很關心,隻是想簡單地輸齣值得的話,還可以像下面這麽寫,Println函數會爲我們自動格式化輸齣。

+

最後,如果我們對輸出的格式也不是很關心,隻是想簡單地輸出值得的話,還可以像下面這麽寫,Println函數會爲我們自動格式化輸出。

fmt.Println(os.Args[1:])
 
-

這個輸齣結果和前面的string.Join得到的結果很相似,隻是被自動地放到了一個方括號里,對slice調用Println函數都會被打印成這樣形式的結果。

+

這個輸出結果和前面的string.Join得到的結果很相似,隻是被自動地放到了一個方括號里,對slice調用Println函數都會被打印成這樣形式的結果。

練習 1.1: 脩改echo程序,使其能夠打印os.Args[0]。

練習 1.2: 脩改echo程序,使其打印value和index,每個value和index顯示一行。

-

練習 1.3: 上手實踐前面提到的strings.Join和直接Println,併觀察輸齣結果的區别。

+

練習 1.3: 上手實踐前面提到的strings.Join和直接Println,併觀察輸出結果的區别。

@@ -2151,7 +2155,7 @@ diff --git a/ch1/ch1-03.html b/ch1/ch1-03.html index fbb8e64..39a937c 100644 --- a/ch1/ch1-03.html +++ b/ch1/ch1-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

1.3. 査找重複的行

-

文件拷貝、文件打印、文件蒐索、文件排序、文件統計類的程序一般都會有比較相似的程序結構:一個處理輸入的循環,在每一個輸入元素上執行計算處理,在處理的同時或者處理完成之後進行結果輸齣。我們會展示一個叫dup程序的三個版本;這個程序的靈感來自於linux的uniq命令,我們的程序將會找到相鄰的重複的行。這個程序提供的模式可以很方便地被脩改來完成不同的需求。

-

第一個版本的dup會輸齣標準輸入流中的齣現多次的行,在行內容前會有其齣現次數的計數。這個程序將引入if表達式,map內置數據結構和bufio的package。

+

文件拷貝、文件打印、文件蒐索、文件排序、文件統計類的程序一般都會有比較相似的程序結構:一個處理輸入的循環,在每一個輸入元素上執行計算處理,在處理的同時或者處理完成之後進行結果輸出。我們會展示一個叫dup程序的三個版本;這個程序的靈感來自於linux的uniq命令,我們的程序將會找到相鄰的重複的行。這個程序提供的模式可以很方便地被脩改來完成不同的需求。

+

第一個版本的dup會輸出標準輸入流中的出現多次的行,在行內容前會有其出現次數的計數。這個程序將引入if表達式,map內置數據結構和bufio的package。

gopl.io/ch1/dup1
 // Dup1 prints the text of each line that appears more than
 // once in the standard input, preceded by its count.
@@ -2048,19 +2052,19 @@
 }
 

和我們前面提到的for循環一樣,在if條件的兩邊,我們也不需要加括號,但是if表達式後的邏輯體的花括號是不能省略的。如果需要的話,像其它編程語言一樣,這個if表達式也可以有else部分,這部分邏輯會在if中的條件結果爲false時被執行。

-

map是Go語言內置的key/value型數據結構,這個數據結構能夠提供常數時間的存儲、穫取、測試操作。key可以是任意數據類型,隻要該類型能夠用==運算符來進行比較,string是最常用的key類型。而value類型的范圍就更大了,基本上什麽類型都是可以的。這個例子中的key都是string類型,value用的是int類型。我們用內置make函數來創建一個空的map,當然了,make方法還可以有别的用處。在4.3章中我們還會對map進行更深入的討論。

+

map是Go語言內置的key/value型數據結構,這個數據結構能夠提供常數時間的存儲、獲取、測試操作。key可以是任意數據類型,隻要該類型能夠用==運算符來進行比較,string是最常用的key類型。而value類型的范圍就更大了,基本上什麽類型都是可以的。這個例子中的key都是string類型,value用的是int類型。我們用內置make函數來創建一個空的map,當然了,make方法還可以有别的用處。在4.3章中我們還會對map進行更深入的討論。

dup程序每次讀取輸入的一行,這一行的內容會被當做一個map的key,而其value值會被+1。counts[input.Text()]++這個語句和下面的兩句是等價的:

line := input.Text()
 counts[line] = counts[line] + 1
 

當然了,在這個例子里我們併不用擔心map在沒有當前的key時就對其進行++操作會有什麽問題,因爲Go語言在碰到這種情況時,會自動將其初始化爲0,然後再進行操作。

在這里我們又用了一個range的循環來打印結果,這次range是被用在map這個數據結構之上。這一次的情況和上次比較類似,range會返迴兩個值,一個key和在map對應這個key的value。對map進行range循環時,其迭代順序是不確定的,從實踐來看,很可能每次運行都會有不一樣的結果(譯註:這是Go語言的設計者有意爲之的,因爲其底層實現不保證插入順序和遍歷順序一致,也希望程序員不要依賴遍歷時的順序,所以榦脆直接在遍歷的時候做了隨機化處理,醉了。補充:好像説隨機序可以防止某種類型的攻擊,雖然不太明白,但是感覺還蠻厲害的),來避免程序員在業務中依賴遍歷時的順序。

-

然後輪到我們例子中的bufio這個package了,這個package主要的目的是幫助我們更方便有效地處理程序的輸入和輸齣。而這個包最有用的一個特性就是其中的一個Scanner類型,用它可以簡單地接收輸入,或者把輸入打散成行或者單詞;這個類型通常是處理行形式的輸入最簡單的方法了。

+

然後輪到我們例子中的bufio這個package了,這個package主要的目的是幫助我們更方便有效地處理程序的輸入和輸出。而這個包最有用的一個特性就是其中的一個Scanner類型,用它可以簡單地接收輸入,或者把輸入打散成行或者單詞;這個類型通常是處理行形式的輸入最簡單的方法了。

本程序中用了一個短變量聲明,來創建一個buffio.Scanner對象:

input := bufio.NewScanner(os.Stdin)
 

scanner對象可以從程序的標準輸入中讀取內容。對input.Scanner的每一次調用都會調入一個新行,併且會自動將其行末的換行符去掉;其結果可以用input.Text()得到。Scan方法在讀到了新行的時候會返迴true,而在沒有新行被讀入時,會返迴false。

-

例子中還有一個fmt.Printf,這個函數和C繫的其它語言里的那個printf函數差不多,都是格式化輸齣的方法。fmt.Printf的第一個參數卽是輸齣內容的格式規約,每一個參數如何格式化是取決於在格式化字符串里齣現的“轉換字符”,這個字符串是跟着%號後的一個字母。比如%d表示以一個整數的形式來打印一個變量,而%s,則表示以string形式來打印一個變量。

-

Printf有一大堆這種轉換,Go語言程序員把這些叫做verb(動詞)。下面的表格列齣了常用的動詞,當然了不是全部,但基本也夠用了。

+

例子中還有一個fmt.Printf,這個函數和C繫的其它語言里的那個printf函數差不多,都是格式化輸出的方法。fmt.Printf的第一個參數卽是輸出內容的格式規約,每一個參數如何格式化是取決於在格式化字符串里出現的“轉換字符”,這個字符串是跟着%號後的一個字母。比如%d表示以一個整數的形式來打印一個變量,而%s,則表示以string形式來打印一個變量。

+

Printf有一大堆這種轉換,Go語言程序員把這些叫做verb(動詞)。下面的表格列出了常用的動詞,當然了不是全部,但基本也夠用了。

%d          int變量
 %x, %o, %b  分别爲16進製,8進製,2進製形式的int
 %f, %g, %e  浮點數: 3.141593 3.141592653589793 3.141593e+00
@@ -2068,11 +2072,11 @@ counts[line] = counts[line] + 1
 %c          rune (Unicode碼點),Go語言里特有的Unicode字符類型
 %s          string
 %q          帶雙引號的字符串 "abc" 或 帶單引號的 rune 'c'
-%v          會將任意變量以易讀的形式打印齣來
+%v          會將任意變量以易讀的形式打印出來
 %T          打印變量的類型
 %%          字符型百分比標誌(%符號本身,沒有其他操作)
-

dup1中的程序還包含了一個\t和\n的格式化字符串。在字符串中會以這些特殊的轉義字符來表示不可見字符。Printf默認不會在輸齣內容後加上換行符。按照慣例,用來格式化的函數都會在末尾以f字母結尾(譯註:f後綴對應format或fmt縮寫),比如log.Printf,fmt.Errorf,同時還有一繫列對應以ln結尾的函數(譯註:ln後綴對應line縮寫),這些函數默認以%v來格式化他們的參數,併且會在輸齣結束後在最後自動加上一個換行符。

-

許多程序從標準輸入中讀取數據,像上面的例子那樣。除此之外,還可能從一繫列的文件中讀取。下一個dup程序就是從標準輸入中讀到一些文件名,用os.Open函數來打開每一個文件穫取內容的。

+

dup1中的程序還包含了一個\t和\n的格式化字符串。在字符串中會以這些特殊的轉義字符來表示不可見字符。Printf默認不會在輸出內容後加上換行符。按照慣例,用來格式化的函數都會在末尾以f字母結尾(譯註:f後綴對應format或fmt縮寫),比如log.Printf,fmt.Errorf,同時還有一繫列對應以ln結尾的函數(譯註:ln後綴對應line縮寫),這些函數默認以%v來格式化他們的參數,併且會在輸出結束後在最後自動加上一個換行符。

+

許多程序從標準輸入中讀取數據,像上面的例子那樣。除此之外,還可能從一繫列的文件中讀取。下一個dup程序就是從標準輸入中讀到一些文件名,用os.Open函數來打開每一個文件獲取內容的。

gopl.io/ch1/dup2
 // Dup2 prints the count and text of lines that appear more than once
 // in the input.  It reads from stdin or from a list of named files.
@@ -2116,7 +2120,7 @@ counts[line] = counts[line] + 1
 }
 

os.Open函數會返迴兩個值。第一個值是一個打開的文件類型(*os.File),這個對象在下面的程序中被Scanner讀取。

-

os.Open返迴的第二個值是一個Go語言內置的error類型。如果這個error和內置值的nil(譯註:相當於其它語言里的NULL)相等的話,説明文件被成功的打開了。之後文件被讀取,一直到文件的最後,文件的Close方法關閉該文件,併釋放相應的占用一切資源。另一方面,如果err的值不是nil的話,那説明在打開文件的時候齣了某種錯誤。這種情況下,error類型的值會描述具體的問題。我們例子里的簡單錯誤處理會在標準錯誤流中用Fprintf和%v來格式化該錯誤字符串。然後繼續處理下一個文件;continue語句會直接跳過之後的語句,直接開始執行下一個循環迭代。

+

os.Open返迴的第二個值是一個Go語言內置的error類型。如果這個error和內置值的nil(譯註:相當於其它語言里的NULL)相等的話,説明文件被成功的打開了。之後文件被讀取,一直到文件的最後,文件的Close方法關閉該文件,併釋放相應的占用一切資源。另一方面,如果err的值不是nil的話,那説明在打開文件的時候出了某種錯誤。這種情況下,error類型的值會描述具體的問題。我們例子里的簡單錯誤處理會在標準錯誤流中用Fprintf和%v來格式化該錯誤字符串。然後繼續處理下一個文件;continue語句會直接跳過之後的語句,直接開始執行下一個循環迭代。

我們在本書中早期的例子中做了比較詳盡的錯誤處理,當然了,在實際編碼過程中,像os.Open這類的函數是一定要檢査其返迴的error值的;爲了減少例子程序的代碼量,我們姑且簡化掉這些不太可能返迴錯誤的處理邏輯。後面的例子里我們會跳過錯誤檢査。在5.4節中我們會對錯誤處理做更詳細的闡述。

讀者可以再觀察一下上面的例子,我們的countLines函數是在其聲明之前就被調用了。在Go語言里,函數和包級别的變量可以以任意的順序被聲明,併不影響其被調用。(譯註:最好還是遵循一定的規范)

再來講講map這個數據結構,map是用make函數創建的數據結構的一個引用。當一個map被作爲參數傳遞給一個函數時,函數接收到的是一份引用的拷貝,雖然本身併不是一個東西,但因爲他們指向的是同一塊數據對象(譯註:類似於C++里的引用傳遞),所以你在函數里對map里的值進行脩改時,原始的map內的值也會改變。在我們的例子中,我們在countLines函數中插入到counts這個map里的值,在主函數中也是看得到的。

@@ -2151,9 +2155,9 @@ counts[line] = counts[line] + 1 } } -

ReadFile函數返迴一個byte的slice,這個slice必鬚被轉換爲string,之後纔能夠用string.Split方法來進行處理。我們在3.5.4節中會更詳細地講解string和byte slice(字節數組)。

+

ReadFile函數返迴一個byte的slice,這個slice必鬚被轉換爲string,之後才能夠用string.Split方法來進行處理。我們在3.5.4節中會更詳細地講解string和byte slice(字節數組)。

在更底層一些的地方,bufio.Scanner,ioutil.ReadFile和ioutil.WriteFile使用的是*os.File的Read和Write方法,不過一般程序員併不需要去直接了解到其底層實現細節,在bufio和io/ioutil包中提供的方法已經足夠好用。

-

練習 1.4: 脩改dup2,使其可以打印重複的行分别齣現在哪些文件。

+

練習 1.4: 脩改dup2,使其可以打印重複的行分别出現在哪些文件。

@@ -2185,7 +2189,7 @@ counts[line] = counts[line] + 1 diff --git a/ch1/ch1-04.html b/ch1/ch1-04.html index a3f2c59..65ced53 100644 --- a/ch1/ch1-04.html +++ b/ch1/ch1-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,9 +2024,9 @@

1.4. GIF動畵

-

下面的程序會演示Go語言標準庫里的image這個package的用法,我們會用這個包來生成一繫列的bit-mapped圖,然後將這些圖片編碼爲一個GIF動畵。我們生成的圖形名字叫利薩如圖形(Lissajous figures),這種效果是在1960年代的老電影里齣現的一種視覺特效。它們是協振子在兩個緯度上振動所産生的麴線,比如兩個sin正絃波分别在x軸和y軸輸入會産生的麴線。圖1.1是這樣的一個例子:

+

下面的程序會演示Go語言標準庫里的image這個package的用法,我們會用這個包來生成一繫列的bit-mapped圖,然後將這些圖片編碼爲一個GIF動畵。我們生成的圖形名字叫利薩如圖形(Lissajous figures),這種效果是在1960年代的老電影里出現的一種視覺特效。它們是協振子在兩個緯度上振動所産生的麴線,比如兩個sin正絃波分别在x軸和y軸輸入會産生的麴線。圖1.1是這樣的一個例子:

-

譯註:要看這個程序的結果,需要將標準輸齣重定向到一個GIF圖像文件(使用 ./lissajous > output.gif 命令)。下面是GIF圖像動畵效果:

+

譯註:要看這個程序的結果,需要將標準輸出重定向到一個GIF圖像文件(使用 ./lissajous > output.gif 命令)。下面是GIF圖像動畵效果:

這段代碼里我們用了一些新的結構,包括const聲明,struct結構體類型,複合聲明。和我們舉的其它的例子不太一樣,這一個例子包含了浮點數運算。這些概念我們隻在這里簡單地説明一下,之後的章節會更詳細地講解。

gopl.io/ch1/lissajous
@@ -2080,12 +2084,12 @@ bla    kIndex)
 }
 

當我們import了一個包路徑包含有多個單詞的package時,比如image/color(image和color兩個單詞),通常我們隻需要用最後那個單詞表示這個包就可以。所以當我們寫color.White時,這個變量指向的是image/color包里的變量,同理gif.GIF是屬於image/gif包里的變量。

-

這個程序里的常量聲明給齣了一繫列的常量值,常量是指在程序編譯後運行時始終都不會變化的值,比如圈數、幀數、延遲值。常量聲明和變量聲明一般都會齣現在包級别,所以這些常量在整個包中都是可以共享的,或者你也可以把常量聲明定義在函數體內部,那麽這種常量就隻能在函數體內用。目前常量聲明的值必鬚是一個數字值、字符串或者一個固定的boolean值。

+

這個程序里的常量聲明給出了一繫列的常量值,常量是指在程序編譯後運行時始終都不會變化的值,比如圈數、幀數、延遲值。常量聲明和變量聲明一般都會出現在包級别,所以這些常量在整個包中都是可以共享的,或者你也可以把常量聲明定義在函數體內部,那麽這種常量就隻能在函數體內用。目前常量聲明的值必鬚是一個數字值、字符串或者一個固定的boolean值。

[]color.Color{...}和gif.GIF{...}這兩個表達式就是我們説的複合聲明(4.2和4.4.1節有説明)。這是實例化Go語言里的複合類型的一種寫法。這里的前者生成的是一個slice切片,後者生成的是一個struct結構體。

gif.GIF是一個struct類型(參考4.4節)。struct是一組值或者叫字段的集合,不同的類型集合在一個struct可以讓我們以一個統一的單元進行處理。anim是一個gif.GIF類型的struct變量。這種寫法會生成一個struct變量,併且其內部變量LoopCount字段會被設置爲nframes;而其它的字段會被設置爲各自類型默認的零值。struct內部的變量可以以一個點(.)來進行訪問,就像在最後兩個賦值語句中顯式地更新了anim這個struct的Delay和Image字段。

-

lissajous函數內部有兩層嵌套的for循環。外層循環會循環64次,每一次都會生成一個單獨的動畵幀。它生成了一個包含兩種顔色的201&201大小的圖片,白色和黑色。所有像素點都會被默認設置爲其零值(也就是palette里的第0個值),這里我們設置的是白色。每次經過內存循環都會通過設置像素爲黑色,生成一張新圖片。其結果會append到之前結果之後。這里我們用到了append(參考4.2.1)這個內置函數,將結果appen到anim中的幀列表末尾,併會設置一個默認的80ms的延遲值。最終循環結束,所有的延遲值也被編碼進了GIF圖片中,併將結果寫入到輸齣流。out這個變量是io.Writer類型,這個類型讓我們可以可以讓我們把輸齣結果寫到很多目標,很快我們就可以看到了。

+

lissajous函數內部有兩層嵌套的for循環。外層循環會循環64次,每一次都會生成一個單獨的動畵幀。它生成了一個包含兩種顔色的201&201大小的圖片,白色和黑色。所有像素點都會被默認設置爲其零值(也就是palette里的第0個值),這里我們設置的是白色。每次經過內存循環都會通過設置像素爲黑色,生成一張新圖片。其結果會append到之前結果之後。這里我們用到了append(參考4.2.1)這個內置函數,將結果appen到anim中的幀列表末尾,併會設置一個默認的80ms的延遲值。最終循環結束,所有的延遲值也被編碼進了GIF圖片中,併將結果寫入到輸出流。out這個變量是io.Writer類型,這個類型讓我們可以可以讓我們把輸出結果寫到很多目標,很快我們就可以看到了。

內存循環設置了兩個偏振。x軸偏振使用的是一個sin函數。y軸偏振也是一個正絃波,但是其其相對x軸的偏振是一個0-3的隨機值,併且初始偏振值是一個零值,併隨着動畵的每一幀逐漸增加。循環會一直跑到x軸完成五次完整的循環。每一步它都會調用SetColorIndex來爲(x, y)點來染黑色。

-

main函數調用了lissajous函數,併且用它來向標準輸齣中打印信息,所以下面這個命令會像圖1.1中産生一個GIF動畵。

+

main函數調用了lissajous函數,併且用它來向標準輸出中打印信息,所以下面這個命令會像圖1.1中産生一個GIF動畵。

$ go build gopl.io/ch1/lissajous
 $ ./lissajous >out.gif
 

練習 1.5: 脩改前面的Lissajous程序里的調色闆,由緑色改爲黑色。我們可以用color.RGBA{0xRR, 0xGG, 0xBB}來得到#RRGGBB這個色值,三個十六進製的字符串分别代表紅、緑、藍像素。

@@ -2103,7 +2107,7 @@ $ ./lissajous >out.gif - +
@@ -2121,7 +2125,7 @@ $ ./lissajous >out.gif diff --git a/ch1/ch1-05.html b/ch1/ch1-05.html index 9aed7da..2e096d6 100644 --- a/ch1/ch1-05.html +++ b/ch1/ch1-05.html @@ -5,7 +5,7 @@ - 穫取URL | Go编程语言 + 獲取URL | Go编程语言 @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,9 +2023,9 @@
-

1.5. 穫取URL

+

1.5. 獲取URL

對於很多現代應用來説,訪問互聯網上的信息和訪問本地文件繫統一樣重要。Go語言在net這個強大package的幫助下提供了一繫列的package來做這件事情,使用這些包可以更簡單地用網絡收發信息,還可以建立更底層的網絡連接,編寫服務器程序。在這些情景下,Go語言原生的併發特性(在第八章中會介紹)就顯得尤其好用了。

-

爲了最簡單地展示基於HTTP穫取信息的方式,下面給齣一個示例程序fetch,這個程序將穫取對應的url,併將其源文本打印齣來;這個例子的靈感來源於curl工具(譯註:unix下的一個網絡相關的工具)。當然了,curl提供的功能更爲複雜豐富,這里我們隻編寫最簡單的樣例。之後我們還會在本書中經常用到這個例子。

+

爲了最簡單地展示基於HTTP獲取信息的方式,下面給出一個示例程序fetch,這個程序將獲取對應的url,併將其源文本打印出來;這個例子的靈感來源於curl工具(譯註:unix下的一個網絡相關的工具)。當然了,curl提供的功能更爲複雜豐富,這里我們隻編寫最簡單的樣例。之後我們還會在本書中經常用到這個例子。

gopl.io/ch1/fetch
 // Fetch prints the content found at a URL.
 package main
@@ -2050,7 +2054,7 @@
     }
 }
 
-

這個程序從兩個package中導入了函數,net/http和io/ioutil包,http.Get函數是創建HTTP請求的函數,如果穫取過程沒有齣錯,那麽會在resp這個結構體中得到訪問的請求結果。resp的Body字段包括一個可讀的服務器響應流。這之後ioutil.ReadAll函數從response中讀取到全部內容;其結果保存在變量b中。resp.Body.Close這一句會關閉resp的Body流,防止資源洩露,Printf函數會將結果b寫齣到標準輸齣流中。

+

這個程序從兩個package中導入了函數,net/http和io/ioutil包,http.Get函數是創建HTTP請求的函數,如果獲取過程沒有出錯,那麽會在resp這個結構體中得到訪問的請求結果。resp的Body字段包括一個可讀的服務器響應流。這之後ioutil.ReadAll函數從response中讀取到全部內容;其結果保存在變量b中。resp.Body.Close這一句會關閉resp的Body流,防止資源洩露,Printf函數會將結果b寫出到標準輸出流中。

$ go build gopl.io/ch1/fetch
 $ ./fetch http://gopl.io
 <html>
@@ -2066,7 +2070,7 @@ fetch: Get http://gopl.io: dial tcp: lookup gopl.io: getaddrinfow: No such host
 

無論哪種失敗原因,我們的程序都用了os.Exit函數來終止進程,併且返迴一個status錯誤碼,其值爲1。

練習 1.7: 函數調用io.Copy(dst, src)會從src中讀取內容,併將讀到的結果寫入到dst中,使用這個函數替代掉例子中的ioutil.ReadAll來拷貝響應結構體到os.Stdout,避免申請一個緩衝區(例子中的b)來存儲。記得處理io.Copy返迴結果中的錯誤。

練習 1.8: 脩改fetch這個范例,如果輸入的url參數沒有 http:// 前綴的話,爲這個url加上該前綴。你可能會用到strings.HasPrefix這個函數。

-

練習 1.9: 脩改fetch打印齣HTTP協議的狀態碼,可以從resp.Status變量得到該狀態碼。

+

練習 1.9: 脩改fetch打印出HTTP協議的狀態碼,可以從resp.Status變量得到該狀態碼。

@@ -2080,7 +2084,7 @@ fetch: Get http://gopl.io: dial tcp: lookup gopl.io: getaddrinfow: No such host - +
@@ -2098,7 +2102,7 @@ fetch: Get http://gopl.io: dial tcp: lookup gopl.io: getaddrinfow: No such host diff --git a/ch1/ch1-06.html b/ch1/ch1-06.html index 19937fa..493dd7c 100644 --- a/ch1/ch1-06.html +++ b/ch1/ch1-06.html @@ -5,7 +5,7 @@ - 併發穫取多個URL | Go编程语言 + 併發獲取多個URL | Go编程语言 @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,9 +2023,9 @@
-

1.6. 併發穫取多個URL

+

1.6. 併發獲取多個URL

Go語言最有意思併且最新奇的特性就是其對併發編程的支持了。併發編程是一個大話題,在第八章和第九章中會專門講到。這里我們隻淺嚐輒止地來體驗一下Go語言里的goroutine和channel。

-

下面的例子fetchall,和上面的fetch程序所要做的工作是一致的,但是這個fetchall的特别之處在於它會同時去穫取所有的URL,所以這個程序的穫取時間不會超過執行時間最長的那一個任務,而不會像前面的fetch程序一樣,執行時間是所有任務執行時間之和。這次的fetchall程序隻會打印穫取的內容大小和經過的時間,不會像上面那樣打印齣穫取的內容。

+

下面的例子fetchall,和上面的fetch程序所要做的工作是一致的,但是這個fetchall的特别之處在於它會同時去獲取所有的URL,所以這個程序的獲取時間不會超過執行時間最長的那一個任務,而不會像前面的fetch程序一樣,執行時間是所有任務執行時間之和。這次的fetchall程序隻會打印獲取的內容大小和經過的時間,不會像上面那樣打印出獲取的內容。

gopl.io/ch1/fetchall
 // Fetchall fetches URLs in parallel and reports their times and sizes.
 package main
@@ -2072,9 +2076,9 @@ $ ./fetchall https://golang.org http://gopl.io https://godoc.org
 0.48s     2475  http://gopl.io
 0.48s elapsed
 

goroutine是一種函數的併發執行方式,而channel是用來在goroutine之間進行參數傳遞。main函數也是運行在一個goroutine中,而go function則表示創建一個新的goroutine,併在這個這個新的goroutine里執行這個函數。

-

main函數中用make函數創建了一個傳遞string類型參數的channel,對每一個命令行參數,我們都用go這個關鍵字來創建一個goroutine,併且讓函數在這個goroutine異步執行http.Get方法。這個程序里的io.Copy會把響應的Body內容拷貝到ioutil.Discard輸齣流中(譯註:這是一個垃圾桶,可以向里面寫一些不需要的數據),因爲我們需要這個方法返迴的字節數,但是又不想要其內容。每當請求返迴內容時,fetch函數都會往ch這個channel里寫入一個字符串,由main函數里的第二個for循環來處理併打印channel里的這個字符串。

-

當一個goroutine嚐試在一個channel上做send或者receive操作時,這個goroutine會阻塞在調用處,直到另一個goroutine往這個channel里寫入、或者接收了值,這樣兩個goroutine纔會繼續執行操作channel完成之後的邏輯。在這個例子中,每一個fetch函數在執行時都會往channel里發送一個值(ch <- expression),主函數接收這些值(<-ch)。這個程序中我們用main函數來所有fetch函數傳迴的字符串,可以避免在goroutine異步執行時同時結束。

-

練習 1.10: 找一個數據量比較大的網站,用本小節中的程序調研網站的緩存策略,對每個URL執行兩遍請求,査看兩次時間是否有較大的差别,併且每次穫取到的響應內容是否一致,脩改本節中的程序,將響應結果輸齣,以便於進行對比。

+

main函數中用make函數創建了一個傳遞string類型參數的channel,對每一個命令行參數,我們都用go這個關鍵字來創建一個goroutine,併且讓函數在這個goroutine異步執行http.Get方法。這個程序里的io.Copy會把響應的Body內容拷貝到ioutil.Discard輸出流中(譯註:這是一個垃圾桶,可以向里面寫一些不需要的數據),因爲我們需要這個方法返迴的字節數,但是又不想要其內容。每當請求返迴內容時,fetch函數都會往ch這個channel里寫入一個字符串,由main函數里的第二個for循環來處理併打印channel里的這個字符串。

+

當一個goroutine嚐試在一個channel上做send或者receive操作時,這個goroutine會阻塞在調用處,直到另一個goroutine往這個channel里寫入、或者接收了值,這樣兩個goroutine才會繼續執行操作channel完成之後的邏輯。在這個例子中,每一個fetch函數在執行時都會往channel里發送一個值(ch <- expression),主函數接收這些值(<-ch)。這個程序中我們用main函數來所有fetch函數傳迴的字符串,可以避免在goroutine異步執行時同時結束。

+

練習 1.10: 找一個數據量比較大的網站,用本小節中的程序調研網站的緩存策略,對每個URL執行兩遍請求,査看兩次時間是否有較大的差别,併且每次獲取到的響應內容是否一致,脩改本節中的程序,將響應結果輸出,以便於進行對比。

@@ -2085,7 +2089,7 @@ $ ./fetchall https://golang.org http://gopl.io https://godoc.org
- + @@ -2106,7 +2110,7 @@ $ ./fetchall https://golang.org http://gopl.io https://godoc.org diff --git a/ch1/ch1-07.html b/ch1/ch1-07.html index fa32b74..39e2c99 100644 --- a/ch1/ch1-07.html +++ b/ch1/ch1-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2041,8 +2045,8 @@ fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path) } -

我們隻用了八九行代碼就實現了一個個Web服務程序,這都是多虧了標準庫里的方法已經幫我們處理了大量的工作。main函數會將所有發送到/路徑下的請求和handler函數關聯起來,/開頭的請求其實就是所有發送到當前站點上的請求,我們的服務跑在了8000端口上。發送到這個服務的“請求”是一個http.Request類型的對象,這個對象中包含了請求中的一繫列相關字段,其中就包括我們需要的URL。當請求到達服務器時,這個請求會被傳給handler函數來處理,這個函數會將/hello這個路徑從請求的URL中解析齣來,然後把其發送到響應中,這里我們用的是標準輸齣流的fmt.Fprintf。Web服務會在第7.7節中詳細闡述。

-

讓我們在後颱運行這個服務程序。如果你的操作繫統是Mac OS X或者Linux,那麽在運行命令的末尾加上一個&符號,卽可讓程序簡單地跑在後颱,而在windows下,你需要在另外一個命令行窗口去運行這個程序了。

+

我們隻用了八九行代碼就實現了一個個Web服務程序,這都是多虧了標準庫里的方法已經幫我們處理了大量的工作。main函數會將所有發送到/路徑下的請求和handler函數關聯起來,/開頭的請求其實就是所有發送到當前站點上的請求,我們的服務跑在了8000端口上。發送到這個服務的“請求”是一個http.Request類型的對象,這個對象中包含了請求中的一繫列相關字段,其中就包括我們需要的URL。當請求到達服務器時,這個請求會被傳給handler函數來處理,這個函數會將/hello這個路徑從請求的URL中解析出來,然後把其發送到響應中,這里我們用的是標準輸出流的fmt.Fprintf。Web服務會在第7.7節中詳細闡述。

+

讓我們在後台運行這個服務程序。如果你的操作繫統是Mac OS X或者Linux,那麽在運行命令的末尾加上一個&符號,卽可讓程序簡單地跑在後台,而在windows下,你需要在另外一個命令行窗口去運行這個程序了。

$ go run src/gopl.io/ch1/server1/main.go &
 

現在我們可以通過命令行來發送客戶端請求了:

$ go build gopl.io/ch1/fetch
@@ -2052,7 +2056,7 @@ $ ./fetch http://localhost:8000/help
 URL.Path = "/help"
 

另外我們還可以直接在瀏覽器里訪問這個URL,然後得到返迴結果,如圖1.2:

-

在這個服務的基礎上疊加特性是很容易的。一種比較實用的脩改是爲訪問的url添加某種狀態。比如,下面這個版本輸齣了同樣的內容,但是會對請求的次數進行計算;對URL的請求結果會包含各種URL被訪問的總次數,直接對/count這個URL的訪問要除外。

+

在這個服務的基礎上疊加特性是很容易的。一種比較實用的脩改是爲訪問的url添加某種狀態。比如,下面這個版本輸出了同樣的內容,但是會對請求的次數進行計算;對URL的請求結果會包含各種URL被訪問的總次數,直接對/count這個URL的訪問要除外。

gopl.io/ch1/server2
 // Server2 is a minimal "echo" and counter server.
 package main
@@ -2089,7 +2093,7 @@ URL.Path = "/help"
 }
 

這個服務器有兩個請求處理函數,請求的url會決定具體調用哪一個:對/count這個url的請求會調用到count這個函數,其它所有的url都會調用默認的處理函數。如果你的請求pattern是以/結尾,那麽所有以該url爲前綴的url都會被這條規則匹配。在這些代碼的背後,服務器每一次接收請求處理時都會另起一個goroutine,這樣服務器就可以同一時間處理多數請求。然而在併發情況下,假如眞的有兩個請求同一時刻去更新count,那麽這個值可能併不會被正確地增加;這個程序可能會被引發一個嚴重的bug:競態條件(參見9.1)。爲了避免這個問題,我們必鬚保證每次脩改變量的最多隻能有一個goroutine,這也就是代碼里的mu.Lock()和mu.Unlock()調用將脩改count的所有行爲包在中間的目的。第九章中我們會進一步講解共享變量。

-

下面是一個更爲豐富的例子,handler函數會把請求的http頭和請求的form數據都打印齣來,這樣可以讓檢査和調試這個服務更爲方便:

+

下面是一個更爲豐富的例子,handler函數會把請求的http頭和請求的form數據都打印出來,這樣可以讓檢査和調試這個服務更爲方便:

gopl.io/ch1/server3
 // handler echoes the HTTP request.
 func handler(w http.ResponseWriter, r *http.Request) {
@@ -2107,23 +2111,23 @@ URL.Path = "/help"
     }
 }
 
-

我們用http.Request這個struct里的字段來輸齣下面這樣的內容:

+

我們用http.Request這個struct里的字段來輸出下面這樣的內容:

GET /?q=query HTTP/1.1
 Header["Accept-Encoding"] = ["gzip, deflate, sdch"] Header["Accept-Language"] = ["en-US,en;q=0.8"]
 Header["Connection"] = ["keep-alive"]
 Header["Accept"] = ["text/html,application/xhtml+xml,application/xml;..."] Header["User-Agent"] = ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)..."] Host = "localhost:8000"
 RemoteAddr = "127.0.0.1:59911"
 Form["q"] = ["query"]
-

可以看到這里的ParseForm被嵌套在了if語句中。Go語言允許這樣的一個簡單的語句結果作爲循環的變量聲明齣現在if語句的最前面,這一點對錯誤處理很有用處。我們還可以像下面這樣寫(當然看起來就長了一些):

+

可以看到這里的ParseForm被嵌套在了if語句中。Go語言允許這樣的一個簡單的語句結果作爲循環的變量聲明出現在if語句的最前面,這一點對錯誤處理很有用處。我們還可以像下面這樣寫(當然看起來就長了一些):

err := r.ParseForm()
 if err != nil {
     log.Print(err)
 }
 

用if和ParseForm結合可以讓代碼更加簡單,併且可以限製err這個變量的作用域,這麽做是很不錯的。我們會在2.7節中講解作用域。

-

在這些程序中,我們看到了很多不同的類型被輸齣到標準輸齣流中。比如前面的fetch程序,就把HTTP的響應數據拷貝到了os.Stdout,或者在lissajous程序里我們輸齣的是一個文件。fetchall程序則完全忽略到了HTTP的響應體,隻是計算了一下響應體的大小,這個程序中把響應體拷貝到了ioutil.Discard。在本節的web服務器程序中則是用fmt.Fprintf直接寫到了http.ResponseWriter中。

-

盡管這三種具體的實現流程併不太一樣,他們都實現一個共同的接口,卽當它們被調用需要一個標準流輸齣時都可以滿足。這個接口叫作io.Writer,在7.1節中會詳細討論。

-

Go語言的接口機製會在第7章中講解,爲了在這里簡單説明接口能做什麽,讓我們簡單地將這里的web服務器和之前寫的lissajous函數結合起來,這樣GIF動畵可以被寫到HTTP的客戶端,而不是之前的標準輸齣流。隻要在web服務器的代碼里加入下面這幾行。

+

在這些程序中,我們看到了很多不同的類型被輸出到標準輸出流中。比如前面的fetch程序,就把HTTP的響應數據拷貝到了os.Stdout,或者在lissajous程序里我們輸出的是一個文件。fetchall程序則完全忽略到了HTTP的響應體,隻是計算了一下響應體的大小,這個程序中把響應體拷貝到了ioutil.Discard。在本節的web服務器程序中則是用fmt.Fprintf直接寫到了http.ResponseWriter中。

+

盡管這三種具體的實現流程併不太一樣,他們都實現一個共同的接口,卽當它們被調用需要一個標準流輸出時都可以滿足。這個接口叫作io.Writer,在7.1節中會詳細討論。

+

Go語言的接口機製會在第7章中講解,爲了在這里簡單説明接口能做什麽,讓我們簡單地將這里的web服務器和之前寫的lissajous函數結合起來,這樣GIF動畵可以被寫到HTTP的客戶端,而不是之前的標準輸出流。隻要在web服務器的代碼里加入下面這幾行。

handler := func(w http.ResponseWriter, r *http.Request) {
     lissajous(w)
 }
@@ -2148,7 +2152,7 @@ http.HandleFunc("/", handler)
         
- + @@ -2169,7 +2173,7 @@ http.HandleFunc("/", handler) diff --git a/ch1/ch1-08.html b/ch1/ch1-08.html index a6195b9..8c11550 100644 --- a/ch1/ch1-08.html +++ b/ch1/ch1-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2031,7 +2035,7 @@ fmt.Println("landed on edge!") } -

在翻轉硬幣的時候,例子里的coinflip函數返迴幾種不同的結果,每一個case都會對應個返迴結果,這里需要註意,Go語言併不需要顯式地去在每一個case後寫break,語言默認執行完case後的邏輯語句會自動退齣。當然了,如果你想要相鄰的幾個case都執行同一邏輯的話,需要自己顯式地寫上一個fallthrough語句來覆蓋這種默認行爲。不過fallthrough語句在一般的編程中用到得很少。

+

在翻轉硬幣的時候,例子里的coinflip函數返迴幾種不同的結果,每一個case都會對應個返迴結果,這里需要註意,Go語言併不需要顯式地去在每一個case後寫break,語言默認執行完case後的邏輯語句會自動退出。當然了,如果你想要相鄰的幾個case都執行同一邏輯的話,需要自己顯式地寫上一個fallthrough語句來覆蓋這種默認行爲。不過fallthrough語句在一般的編程中用到得很少。

Go語言里的switch還可以不帶操作對象(譯註:switch不帶操作對象時默認用true值代替,然後將每個case的表達式和true值進行比較);可以直接羅列多種條件,像其它語言里面的多個if else一樣,下面是一個例子:

func Signum(x int) int {
     switch {
@@ -2054,7 +2058,7 @@
 var p Point
 

類型聲明和命名類型會在第二章中介紹。

-

指針: Go語言提供了指針。指針是一種直接存儲了變量的內存地址的數據類型。在其它語言中,比如C語言,指針操作是完全不受約束的。在另外一些語言中,指針一般被處理爲“引用”,除了到處傳遞這些指針之外,併不能對這些指針做太多事情。Go語言在這兩種范圍中取了一種平衡。指針是可見的內存地址,&操作符可以返迴一個變量的內存地址,併且*操作符可以穫取指針指向的變量內容,但是在Go語言里沒有指針運算,也就是不能像c語言里可以對指針進行加或減操作。我們會在2.3.2中進行詳細介紹。

+

指針: Go語言提供了指針。指針是一種直接存儲了變量的內存地址的數據類型。在其它語言中,比如C語言,指針操作是完全不受約束的。在另外一些語言中,指針一般被處理爲“引用”,除了到處傳遞這些指針之外,併不能對這些指針做太多事情。Go語言在這兩種范圍中取了一種平衡。指針是可見的內存地址,&操作符可以返迴一個變量的內存地址,併且*操作符可以獲取指針指向的變量內容,但是在Go語言里沒有指針運算,也就是不能像c語言里可以對指針進行加或減操作。我們會在2.3.2中進行詳細介紹。

方法和接口: 方法是和命名類型關聯的一類函數。Go語言里比較特殊的是方法可以被關聯到任意一種命名類型。在第六章我們會詳細地講方法。接口是一種抽象類型,這種類型可以讓我們以同樣的方式來處理不同的固有類型,不用關心它們的具體實現,而隻需要關註它們提供的方法。第七章中會詳細説明這些內容。

包(packages): Go語言提供了一些很好用的package,併且這些package是可以擴展的。Go語言社區已經創造併且分享了很多很多。所以Go語言編程大多數情況下就是用已有的package來寫我們自己的代碼。通過這本書,我們會講解一些重要的標準庫內的package,但是還是有很多我們沒有篇幅去説明,因爲我們沒法在這樣的厚度的書里去做一部代碼大全。

在你開始寫一個新程序之前,最好先去檢査一下是不是已經有了現成的庫可以幫助你更高效地完成這件事情。你可以在 https://golang.org/pkghttps://godoc.org 中找到標準庫和社區寫的package。godoc這個工具可以讓你直接在本地命令行閲讀標準庫的文檔。比如下面這個例子。

@@ -2097,7 +2101,7 @@ func ListenAndServe(addr string, handler Handler) error diff --git a/ch1/ch1.html b/ch1/ch1.html index 2d6f583..ee144c7 100644 --- a/ch1/ch1.html +++ b/ch1/ch1.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

第1章 入門

-

本章會介紹Go語言里的一些基本組件。我們希望用信息和例子盡快帶你入門。本章和之後章節的例子都是針對眞實的開發案例給齣。本章我們隻是簡單地爲你介紹一些Go語言的入門例子,從簡單的文件處理、圖像處理到互聯網併發客戶端和服務端程序。當然,在第一章我們不會詳盡地一一去説明細枝末節,不過用這些程序來學習一門新語言肯定是很有效的。

-

當你學習一門新語言時,你會用這門新語言去重寫自己以前熟悉語言例子的傾向。在學習Go語言的過程中,盡量避免這麽做。我們會向你演示如何纔能寫齣好的Go語言程序,所以請使用這里的代碼作爲你寫自己的Go程序時的指南。

+

本章會介紹Go語言里的一些基本組件。我們希望用信息和例子盡快帶你入門。本章和之後章節的例子都是針對眞實的開發案例給出。本章我們隻是簡單地爲你介紹一些Go語言的入門例子,從簡單的文件處理、圖像處理到互聯網併發客戶端和服務端程序。當然,在第一章我們不會詳盡地一一去説明細枝末節,不過用這些程序來學習一門新語言肯定是很有效的。

+

當你學習一門新語言時,你會用這門新語言去重寫自己以前熟悉語言例子的傾向。在學習Go語言的過程中,盡量避免這麽做。我們會向你演示如何才能寫出好的Go語言程序,所以請使用這里的代碼作爲你寫自己的Go程序時的指南。

@@ -2053,7 +2057,7 @@ diff --git a/ch10/ch10-01.html b/ch10/ch10-01.html index 9bf656c..7c213a3 100644 --- a/ch10/ch10-01.html +++ b/ch10/ch10-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2022,8 +2026,8 @@

10.1. 簡介

任何包繫統設計的目的都是爲了使大型程序的設計和維護, 通過將一組相關的特性放進一個獨立的單元以便於理解和更新, 同時保持和程序中其他單元的相對獨立性. 這種模塊化的特性允許每個包可以被其他的不同項目共享和重用, 在項目內甚至全球統一的分發.

每個包定義了一個不同的名稱空間用於它內部的每個標識符. 每個名稱關聯到一個特定的包, 我們最好給類型, 函數等選擇簡短清晰的名字, 這樣可以避免在我們使用它們的時候減少和其他部分名字的衝突.

-

包還通過控製包內名字的可見性和是否導齣來實現封裝特性. 通過限製包成員的可見性併隱藏包API的具體實現, 將允許包的維護者在不影響外部包用戶的前提下調整包的內部實現. 通過限製包內變量的可見性, 還可以控製用戶通過某些特定函數來訪問和更新內部變量, 這樣可以保證內部變量的一致性和併發時的互斥約束.

-

當我們脩改了一個文件, 我們必鬚重新編譯改文件對應的包和所以依賴該包的其他包.卽使是從頭構建, Go的編譯器也明顯快於其他編譯語言. Go的編譯速度主要得益於三個特性. 第一點, 所有導入的包必鬚在每個文件的開頭顯式聲明, 這樣的話編譯器就沒有必要讀取分析整個文件來判斷包的依賴關繫. 第二點, 包的依賴關繫形成一個有向無環圖, 因爲沒有循環依賴, 每個包可以被獨立編譯, 很可能是併發編譯. 第三點, 編譯後包的目標文件不僅僅記録包本身的導齣信息, 同時還記録了它的依賴關繫. 因此, 在編譯一個包的時候, 編譯器隻需要讀取每個直接導入包的目標文件, 而不是要遍歷所有依賴的的文件(譯註: 很多可能是間接依賴).

+

包還通過控製包內名字的可見性和是否導出來實現封裝特性. 通過限製包成員的可見性併隱藏包API的具體實現, 將允許包的維護者在不影響外部包用戶的前提下調整包的內部實現. 通過限製包內變量的可見性, 還可以控製用戶通過某些特定函數來訪問和更新內部變量, 這樣可以保證內部變量的一致性和併發時的互斥約束.

+

當我們脩改了一個文件, 我們必鬚重新編譯改文件對應的包和所以依賴該包的其他包.卽使是從頭構建, Go的編譯器也明顯快於其他編譯語言. Go的編譯速度主要得益於三個特性. 第一點, 所有導入的包必鬚在每個文件的開頭顯式聲明, 這樣的話編譯器就沒有必要讀取分析整個文件來判斷包的依賴關繫. 第二點, 包的依賴關繫形成一個有向無環圖, 因爲沒有循環依賴, 每個包可以被獨立編譯, 很可能是併發編譯. 第三點, 編譯後包的目標文件不僅僅記録包本身的導出信息, 同時還記録了它的依賴關繫. 因此, 在編譯一個包的時候, 編譯器隻需要讀取每個直接導入包的目標文件, 而不是要遍歷所有依賴的的文件(譯註: 很多可能是間接依賴).

@@ -2055,7 +2059,7 @@ diff --git a/ch10/ch10-02.html b/ch10/ch10-02.html index 3b7744e..9a34e58 100644 --- a/ch10/ch10-02.html +++ b/ch10/ch10-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2021,7 +2025,7 @@

10.2. 導入路徑

每個包是由一個全局唯一的字符串所標識的導入路徑定位. -齣現在導入聲明中的導入路徑也是字符串.

+出現在導入聲明中的導入路徑也是字符串.

import (
     "fmt"
     "math/rand"
@@ -2065,7 +2069,7 @@
 
 
diff --git a/ch10/ch10-03.html b/ch10/ch10-03.html
index 621618b..7d62e21 100644
--- a/ch10/ch10-03.html
+++ b/ch10/ch10-03.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2068,7 +2072,7 @@ diff --git a/ch10/ch10-04.html b/ch10/ch10-04.html index 25edcdc..1ef6b99 100644 --- a/ch10/ch10-04.html +++ b/ch10/ch10-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2079,7 +2083,7 @@ diff --git a/ch10/ch10-05.html b/ch10/ch10-05.html index 74a2682..65db059 100644 --- a/ch10/ch10-05.html +++ b/ch10/ch10-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2055,7 +2059,7 @@ return jpeg.Encode(out, img, &jpeg.Options{Quality: 95}) }
-

如果我們將 gopl.io/ch3/mandelbrot (§3.3) 的輸齣導入到這個工具的輸入, 它將解碼輸入的PNG格式圖像, 然後轉換爲JPEG格式的圖像(圖3.3).

+

如果我們將 gopl.io/ch3/mandelbrot (§3.3) 的輸出導入到這個工具的輸入, 它將解碼輸入的PNG格式圖像, 然後轉換爲JPEG格式的圖像(圖3.3).

$ go build gopl.io/ch3/mandelbrot
 $ go build gopl.io/ch10/jpeg
 $ ./mandelbrot | ./jpeg >mandelbrot.jpg
@@ -2087,7 +2091,7 @@ db, err = sql.Open("postgres", dbname
 db, err = sql.Open("mysql", dbname)    // OK
 db, err = sql.Open("sqlite3", dbname)  // returns error: unknown driver "sqlite3"
 
-

練習 10.1: 擴展 jpeg 程序, 支持任意圖像格式之間的相互轉換, 使用 image.Decode 檢測支持的格式類型, 然後同步 flag 命令行標誌參數選擇輸齣的格式.

+

練習 10.1: 擴展 jpeg 程序, 支持任意圖像格式之間的相互轉換, 使用 image.Decode 檢測支持的格式類型, 然後同步 flag 命令行標誌參數選擇輸出的格式.

練習 10.2: 設計一個通用的壓縮文件讀取框架, 用來讀取 ZIP(archive/zip) 和 POSIX tar(archive/tar) 格式壓縮的文檔. 使用類似上面的註冊機製來擴展支持不同的壓縮格式, 然後根據需要通過匿名導入選擇支持的格式.

@@ -2120,7 +2124,7 @@ db, err = sql.Open("sqlite3", dbname) diff --git a/ch10/ch10-06.html b/ch10/ch10-06.html index cf61cf9..13d3ddf 100644 --- a/ch10/ch10-06.html +++ b/ch10/ch10-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2040,7 +2044,7 @@ type Reader struct{ /* ... */ } func NewReader(s string) *Reader -

string 本身併沒有齣現在每個成員名字中. 因爲用戶會這樣引用這些成員 strings.Index, strings.Replacer 等.

+

string 本身併沒有出現在每個成員名字中. 因爲用戶會這樣引用這些成員 strings.Index, strings.Replacer 等.

其他一些包, 可能隻描述了單一的數據類型, 例如 html/template 和 math/rand 等, 隻暴露一個主要的數據結構和與它相關的方法, 還有一個 New 名字的函數用於創建實例.

package rand // "math/rand"
 
@@ -2081,7 +2085,7 @@
 
 
diff --git a/ch10/ch10-07.html b/ch10/ch10-07.html
index d71391b..59500b6 100644
--- a/ch10/ch10-07.html
+++ b/ch10/ch10-07.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2022,7 +2026,7 @@

10.7. 工具

本章剩下的部分將討論Go工具箱的特性, 包括如何 下載, 格式化, 構建, 測試 和 安裝 Go 程序.

Go的工具箱集合了一繫列的功能到一個命令集. 它可以看作是一個包管理器(類似於Linux中的apt和rpm工具), 用於包的査詢, 計算的包依賴關繫, 從遠程版本控製繫統和下載它們等任務. 它也是一個構建繫統, 計算文件的依賴關繫, 然後調用編譯器, 滙編器 和 連接器 構建程序, 雖然它故意被設計成沒有標準的make命令那麽複雜. 它也是一個測試驅動程序, 我們在第11章討論測試話題.

-

Go工具箱的命令有着類似"瑞士軍刀"的風格, 帶着一打子的子命令, 有一些我們經常用到, 例如 get, run, build, 和 fmt 等. 你可以運行 go help 命令査看內置的溫度, 爲了査詢方便, 我們列齣了最常用的命令:

+

Go工具箱的命令有着類似"瑞士軍刀"的風格, 帶着一打子的子命令, 有一些我們經常用到, 例如 get, run, build, 和 fmt 等. 你可以運行 go help 命令査看內置的溫度, 爲了査詢方便, 我們列出了最常用的命令:

$ go
 ...
     build            compile packages and dependencies
@@ -2079,14 +2083,14 @@ GOOS="darwin"
 ...
 

10.7.2. 下載包

使用Go工具, 不僅可以根據包導入路徑找到本地工作區的包, 甚至可以從互聯網上找到和更新包.

-

使用命令 go get 可以下載一個單一的包或者用 ... 下載整個子目録里面的每個包. Go工具同時計算併下載所依賴的每個包, 這也是前一個例子中 golang.org/x/net/html 自動齣現在本地工作區目録的原因.

-

一旦 go get 命令下載了包, 然後就是安裝包或包對應的命令. 我們將在下一節再關註它的細節, 現在隻是展示下整個過程是如何的簡單. 第一個命令是穫取 golint 工具, 用於檢測Go源代碼的編程風格是否有問題. 第二個命令是用 golint 對 2.6.2節的 gopl.io/ch2/popcount 包代碼進行編碼風格檢査. 它友好地報告了忘記了包的文檔:

+

使用命令 go get 可以下載一個單一的包或者用 ... 下載整個子目録里面的每個包. Go工具同時計算併下載所依賴的每個包, 這也是前一個例子中 golang.org/x/net/html 自動出現在本地工作區目録的原因.

+

一旦 go get 命令下載了包, 然後就是安裝包或包對應的命令. 我們將在下一節再關註它的細節, 現在隻是展示下整個過程是如何的簡單. 第一個命令是獲取 golint 工具, 用於檢測Go源代碼的編程風格是否有問題. 第二個命令是用 golint 對 2.6.2節的 gopl.io/ch2/popcount 包代碼進行編碼風格檢査. 它友好地報告了忘記了包的文檔:

$ 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 "Package popcount ..."
-

go get 命令支持當前流行的託管網站 GitHub, Bitbucket, 和 Launchpad, 可以直接從它們的版本控製繫統請求代碼. 對於其他的網站, 你可能需要指定版本控製繫統的具體路徑和協議, 例如 Git 或 Mercurial. 運行 go help importpath 穫取更新的信息.

-

go get 穫取的代碼是眞實的本地存儲倉庫, 不僅僅隻是複製文件, 因此你依然可以使用版本管理工具比較本地代碼的變更, 或者切換到其他的版本. 例如 golang.org/x/net 目録對應一個 Git 倉庫:

+

go get 命令支持當前流行的託管網站 GitHub, Bitbucket, 和 Launchpad, 可以直接從它們的版本控製繫統請求代碼. 對於其他的網站, 你可能需要指定版本控製繫統的具體路徑和協議, 例如 Git 或 Mercurial. 運行 go help importpath 獲取更新的信息.

+

go get 獲取的代碼是眞實的本地存儲倉庫, 不僅僅隻是複製文件, 因此你依然可以使用版本管理工具比較本地代碼的變更, 或者切換到其他的版本. 例如 golang.org/x/net 目録對應一個 Git 倉庫:

$ cd $GOPATH/src/golang.org/x/net
 $ git remote -v
 origin  https://go.googlesource.com/net (fetch)
@@ -2098,9 +2102,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 將確保所有的包和依賴的包的版本都是最新的, 然後編譯和安裝它們. 如果不包含該標誌參數, 如果包已經在本地存在, 那麽將不會被更新.

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 參數, 以區别普通的瀏覽器請求.)

10.7.3. 構建包

-

go build 命令編譯參數指定的每個包. 如果包是一個庫, 則忽略輸齣結果; 這可以用於檢測包的可以正確編譯的. +

go build 命令編譯參數指定的每個包. 如果包是一個庫, 則忽略輸出結果; 這可以用於檢測包的可以正確編譯的. 如果包的名字是 main, go build 將調用連接器在當前目録創建一個可執行程序; 導入路徑的最後一段作爲可執行程序的名字.

因爲每個目録隻包含一個包, 因此每個可執行程序後者叫Unix術語中的命令, 會要求放到一個獨立的目録. 這些目録有時候會放在名叫 cmd 目録的子目録下面, 例如用於提供Go文檔服務的 golang.org/x/tools/cmd/godoc 命令 (§10.7.4).

每個包可以由它們的導入路徑指定, 就像前面看到的那樣, 或者有一個相對目録的路徑知道, 必鬚以 ... 開頭. 如果沒有指定參數, 那麽默認指定爲當前的目録. 下面的命令用於構建同一個包, 雖然它們的寫法各不相同:

@@ -2137,8 +2141,8 @@ $ ./quoteargs one "two three" four\ five

第一行的參數列表中第一個不是以 .go 結尾的將作爲可執行程序的參數運行.

默認情況下, go build 命令構建指定的包和它依賴的包, 然後丟棄所有除了最後的可執行文件之外的中間編譯結果. 依賴分析和編譯都是很快的, 但是隨着項目增加到幾十個包和成韆上萬行代碼, 依賴關繫分析和編譯時間的消耗將變的可觀, 可能需要幾秒種, 卽使這些依賴項沒有改變.

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的交叉構建也是很簡單的. 隻需要設置好目標對應的GOOS 和 GOARCH, 然後運行構建目録卽可. 下面交叉編譯的程序將輸齣它在編譯時操作繫統和CPU類型:

+

因爲編譯對應不同的操作繫統平台和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類型:

gopl.io/ch10/cross
 
 func main() {
@@ -2152,23 +2156,23 @@ darwin amd64
 $ GOARCH=386 go build gopl.io/ch10/cross
 $ ./cross
 darwin 386
-

有些包可能需要針對不同平颱和處理器類型輸齣不同版本的代碼, 以便於處理底層的可移植性問題或提供爲一些特點代碼提供優化. 如果一個文件名包含了一個操作繫統或處理器類型名字, 例如 net_linux.go 或 asm_amd64.s, Go工具將隻在對應的平颱編譯這些文件. 還有一個特别的構建註釋註釋可以提供更多的構建控製. 例如, 文件中如果包含下面的註釋:

+

有些包可能需要針對不同平台和處理器類型輸出不同版本的代碼, 以便於處理底層的可移植性問題或提供爲一些特點代碼提供優化. 如果一個文件名包含了一個操作繫統或處理器類型名字, 例如 net_linux.go 或 asm_amd64.s, Go工具將隻在對應的平台編譯這些文件. 還有一個特别的構建註釋註釋可以提供更多的構建控製. 例如, 文件中如果包含下面的註釋:

// +build linux darwin
 
-

在包聲明的前面(含包的註釋), 告訴 go build 隻在針對 Linux 或 Mac OS X 是纔編譯這個文件. 下面的構建註釋表示不編譯這個文件:

+

在包聲明的前面(含包的註釋), 告訴 go build 隻在針對 Linux 或 Mac OS X 是才編譯這個文件. 下面的構建註釋表示不編譯這個文件:

// +build ignore
 

For more details, see the Build Constraints section of the go/build package’s documentation:

更多細節, 可以參考 go/build 包的構建約束部分的文檔.

$ go doc go/build
 

10.7.4. 包文檔

-

Go的編碼風格鼓勵爲每個包提供良好的文檔. 包中每個導齣的成員和包聲明前都應該包含添加目的和用法説明的註釋.

+

Go的編碼風格鼓勵爲每個包提供良好的文檔. 包中每個導出的成員和包聲明前都應該包含添加目的和用法説明的註釋.

Go中包文檔註釋一般是完整的句子, 第一行是包的摘要説明, 註釋後僅跟着包聲明語句. 函數的參數或其他的標識符併不需要額外的引號或其他標記註明. 例如, 下面是 fmt.Fprintf 的文檔註釋.

// Fprintf formats according to a format specifier and writes to w.
 // It returns the number of bytes written and any write error encountered.
 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 doc 命令打印包的聲明和每個成員的文檔註釋, 下面是整個包的文檔:

@@ -2208,8 +2212,8 @@ func (dec *Decoder) Decode(v interface{}) error
$ godoc -http :8000
 

其中 -analysis=type-analysis=pointer 命令行標誌參數用於打開文檔和代碼中關於靜態分析的結果.

10.7.5. 內部包

-

在Go程序中, 包的封裝機製是一個重要的特性. 爲導齣的標識符隻在同一個包內部可以訪問, 導齣的標識符則是面向全世界可見.

-

有時候, 一個中間的狀態可能也是有用的, 對於一小部分信任的包是可見的, 但併不是對所有調用者都可見. 例如, 當我們計劃將一個大的包拆分爲很多小的更容易管理的子包, 但是我們併不想將內部的子包結構也完全暴露齣去. 同時, 我們肯呢個還希望在內部子包之間共享一些通用的處理包. 或者我們隻是想實驗一個新包的還併不穩定的接口, 暫時隻暴露給一些受限製的客戶端.

+

在Go程序中, 包的封裝機製是一個重要的特性. 爲導出的標識符隻在同一個包內部可以訪問, 導出的標識符則是面向全世界可見.

+

有時候, 一個中間的狀態可能也是有用的, 對於一小部分信任的包是可見的, 但併不是對所有調用者都可見. 例如, 當我們計劃將一個大的包拆分爲很多小的更容易管理的子包, 但是我們併不想將內部的子包結構也完全暴露出去. 同時, 我們肯呢個還希望在內部子包之間共享一些通用的處理包. 或者我們隻是想實驗一個新包的還併不穩定的接口, 暫時隻暴露給一些受限製的客戶端.

爲了滿足這些需求, Go構建工具支持包含 internal 名字的路徑段的包導入路徑. 這種包叫 internal 包, 一個 internal 包隻能被有和internal目録有同一個父目録的包所導入. 例如, net/http/internal/chunked 內部包隻能被 net/http/httputil 或 net/http 導入, 但是不能被 net/url 包導入. 但是 net/url 包 可以導入 net/http/httputil.

net/http
@@ -2242,7 +2246,7 @@ gopl.io/ch3/surface
 
$ go list ...xml...
 encoding/xml
 gopl.io/ch7/xmlselect
-

go list 可以穫取每個包完整的元信息, 而不僅僅隻是導入路徑, 這些信息可以以不同格式提供給用戶. 其中 -json 標誌參數表示用JSON格式打印每個包的元信息.

+

go list 可以獲取每個包完整的元信息, 而不僅僅隻是導入路徑, 這些信息可以以不同格式提供給用戶. 其中 -json 標誌參數表示用JSON格式打印每個包的元信息.

$ go list -json hash
 {
     "Dir": "/home/gopher/go/src/hash",
@@ -2268,7 +2272,7 @@ gopl.io/ch7/xmlselect
         "unsafe"
     ]
 }
-

參數 -f 允許用戶使用 text/template (§4.6) 的模闆語言定義輸齣文本的格式. 下面的命令打印 strconv 包的依賴的包, 然後用 join 模闆函數鏈接爲一行, 用一個空格分隔:

+

參數 -f 允許用戶使用 text/template (§4.6) 的模闆語言定義輸出文本的格式. 下面的命令打印 strconv 包的依賴的包, 然後用 join 模闆函數鏈接爲一行, 用一個空格分隔:

$ go list -f '{{join .Deps " "}}' strconv
 errors math runtime unicode/utf8 unsafe
 

譯註: 上面的命令在 Windows 的命令行運行會遇到 template: main:1: unclosed action 的錯誤. 産生錯誤的原因是因爲命令行對里面的 " " 參數進行轉義了. 按照下面的方法解決轉義字符串的問題:

@@ -2284,7 +2288,7 @@ compress/zlib -> bufio compress/flate errors fmt hash hash/adler32 io
$ go list -f "{{.ImportPath}} -> {{join .Imports \" \"}}" compress/...
 

go list 命令對於一次性的交互式査詢或自動化構建和測試腳本都很有幫助. 我們將在 11.2.4節 中再次使用它. 更多的信息, 包括可設置的字段和意義, 可以用 go help list 命令査看.

在本章, 我們解釋了Go工具箱除了測試命令之外的所有重要的命令. 在下一章, 我們將看到如何用 go test 命令去測試Go程序.

-

練習10.4: 創建一個工具, 根據命令行指定的參數, 報告工作區所有依賴指定包的其他包集合. 提示: 你需要運行 go list 命令兩次, 一次用於初始化包, 一次用於所有包. 你可能需要用 encoding/json (§4.5) 包來分析輸齣的 JSON 格式的信息.

+

練習10.4: 創建一個工具, 根據命令行指定的參數, 報告工作區所有依賴指定包的其他包集合. 提示: 你需要運行 go list 命令兩次, 一次用於初始化包, 一次用於所有包. 你可能需要用 encoding/json (§4.5) 包來分析輸出的 JSON 格式的信息.

@@ -2316,7 +2320,7 @@ compress/zlib -> bufio compress/flate errors fmt hash hash/adler32 io diff --git a/ch10/ch10.html b/ch10/ch10.html index 6e26215..b54ea4a 100644 --- a/ch10/ch10.html +++ b/ch10/ch10.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2054,7 +2058,7 @@ diff --git a/ch11/ch11-01.html b/ch11/ch11-01.html index f80462d..909b7dd 100644 --- a/ch11/ch11-01.html +++ b/ch11/ch11-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2054,7 +2058,7 @@ diff --git a/ch11/ch11-02.html b/ch11/ch11-02.html index 3825926..ca99aaf 100644 --- a/ch11/ch11-02.html +++ b/ch11/ch11-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2046,7 +2050,7 @@ return true } -

在相同的目録下, word_test.go 文件包含了 TestPalindrome 和 TestNonPalindrome 兩個測試函數. 每一個都是測試 IsPalindrome 是否給齣正確的結果, 併使用 t.Error 報告失敗:

+

在相同的目録下, word_test.go 文件包含了 TestPalindrome 和 TestNonPalindrome 兩個測試函數. 每一個都是測試 IsPalindrome 是否給出正確的結果, 併使用 t.Error 報告失敗:

package word
 
 import "testing"
@@ -2070,7 +2074,7 @@
 
$ cd $GOPATH/src/gopl.io/ch11/word1
 $ go test
 ok   gopl.io/ch11/word1  0.008s
-

還比較滿意, 我們運行了這個程序, 不過沒有提前退齣是因爲還沒有遇到BUG報告. 一個法國名爲 Noelle Eve Elleon 的用戶抱怨 IsPalindrome 函數不能識别 ‘‘été.’’. 另外一個來自美國中部用戶的抱怨是不能識别 ‘‘A man, a plan, a canal: Panama.’’. 執行特殊和小的BUG報告爲我們提供了新的更自然的測試用例.

+

還比較滿意, 我們運行了這個程序, 不過沒有提前退出是因爲還沒有遇到BUG報告. 一個法国名爲 Noelle Eve Elleon 的用戶抱怨 IsPalindrome 函數不能識别 ‘‘été.’’. 另外一個來自美国中部用戶的抱怨是不能識别 ‘‘A man, a plan, a canal: Panama.’’. 執行特殊和小的BUG報告爲我們提供了新的更自然的測試用例.

func TestFrenchPalindrome(t *testing.T) {
     if !IsPalindrome("été") {
         t.Error(`IsPalindrome("été") = false`)
@@ -2093,7 +2097,7 @@ ok   gopl.io/ch11/word1  0.008s
     word_test.go:35: IsPalindrome("A man, a plan, a canal: Panama") = false
 FAIL
 FAIL    gopl.io/ch11/word1  0.014s
-

先編寫測試用例併觀察到測試用例觸發了和用戶報告的錯誤相同的描述是一個好的測試習慣. 隻有這樣, 我們纔能定位我們要眞正解決的問題.

+

先編寫測試用例併觀察到測試用例觸發了和用戶報告的錯誤相同的描述是一個好的測試習慣. 隻有這樣, 我們才能定位我們要眞正解決的問題.

先寫測試用例的另好處是, 運行測試通常會比手工描述報告的處理更快, 這讓我們可以進行快速地迭代. 如果測試集有很多運行緩慢的測試, 我們可以通過隻選擇運行某些特定的測試來加快測試速度.

參數 -v 用於打印每個測試函數的名字和運行時間:

$ go test -v
@@ -2110,7 +2114,7 @@ FAIL    gopl.io/ch11/word1  0.014s
 FAIL
 exit status 1
 FAIL    gopl.io/ch11/word1  0.017s
-

參數 -run 是一個正則表達式, 隻有測試函數名被它正確匹配的測試函數纔會被 go test 運行:

+

參數 -run 是一個正則表達式, 隻有測試函數名被它正確匹配的測試函數才會被 go test 運行:

$ go test -v -run="French|Canal"
 === RUN TestFrenchPalindrome
 --- FAIL: TestFrenchPalindrome (0.00s)
@@ -2178,14 +2182,14 @@ FAIL    gopl.io/ch11/word1  0.014s
 
$ go test gopl.io/ch11/word2
 ok      gopl.io/ch11/word2      0.015s
 

這種表格驅動的測試在Go中很常見的. 我們很容易想表格添加新的測試數據, 併且後面的測試邏輯也沒有冗餘, 這樣我們可以更好地完善錯誤信息.

-

失敗的測試的輸齣併不包括調用 t.Errorf 時刻的堆棧調用信息. 不像其他語言或測試框架的 assert 斷言, t.Errorf 調用也沒有引起 panic 或停止測試的執行. 卽使表格中前面的數據導致了測試的失敗, 表格後面的測試數據依然會運行測試, 因此在一個測試中我們可能了解多個失敗的信息.

+

失敗的測試的輸出併不包括調用 t.Errorf 時刻的堆棧調用信息. 不像其他語言或測試框架的 assert 斷言, t.Errorf 調用也沒有引起 panic 或停止測試的執行. 卽使表格中前面的數據導致了測試的失敗, 表格後面的測試數據依然會運行測試, 因此在一個測試中我們可能了解多個失敗的信息.

如果我們眞的需要停止測試, 或許是因爲初始化失敗或可能是早先的錯誤導致了後續錯誤等原因, 我們可以使用 t.Fatal 或 t.Fatalf 停止測試. 它們必鬚在和測試函數同一個 goroutine 內調用.

-

測試失敗的信息一般的形式是 "f(x) = y, want z", f(x) 解釋了失敗的操作和對應的輸齣, y 是實際的運行結果, z 是期望的正確的結果. 就像前面檢査迴文字符串的例子, 實際的函數用於 f(x) 部分. 如果顯示 x 是表格驅動型測試中比較重要的部分, 因爲同一個斷言可能對應不同的表格項執行多次. 要避免無用和冗餘的信息. 在測試類似 IsPalindrome 返迴布爾類型的函數時, 可以忽略併沒有額外信息的 z 部分. 如果 x, y 或 z 是 y 的長度, 輸齣一個相關部分的簡明總結卽可. 測試的作者應該要努力幫助程序員診斷失敗的測試.

+

測試失敗的信息一般的形式是 "f(x) = y, want z", f(x) 解釋了失敗的操作和對應的輸出, y 是實際的運行結果, z 是期望的正確的結果. 就像前面檢査迴文字符串的例子, 實際的函數用於 f(x) 部分. 如果顯示 x 是表格驅動型測試中比較重要的部分, 因爲同一個斷言可能對應不同的表格項執行多次. 要避免無用和冗餘的信息. 在測試類似 IsPalindrome 返迴布爾類型的函數時, 可以忽略併沒有額外信息的 z 部分. 如果 x, y 或 z 是 y 的長度, 輸出一個相關部分的簡明總結卽可. 測試的作者應該要努力幫助程序員診斷失敗的測試.

練習 11.1: 爲 4.3節 中的 charcount 程序編寫測試.

練習 11.2: 爲 (§6.5)的 IntSet 編寫一組測試, 用於檢査每個操作後的行爲和基於內置 map 的集合等價 , 後面 練習11.7 將會用到.

11.2.1. 隨機測試

表格驅動的測試便於構造基於精心挑選的測試數據的測試用例. 另一種測試思路是隨機測試, 也就是通過構造更廣泛的隨機輸入來測試探索函數的行爲.

-

那麽對於一個隨機的輸入, 我們如何能知道希望的輸齣結果呢? 這里有兩種策略. 第一個是編寫另一個函數, 使用簡單和清晰的算法, 雖然效率較低但是行爲和要測試的函數一致, 然後針對相同的隨機輸入檢査兩者的輸齣結果. 第二種是生成的隨機輸入的數據遵循特定的模式, 這樣我們就可以知道期望的輸齣的模式.

+

那麽對於一個隨機的輸入, 我們如何能知道希望的輸出結果呢? 這里有兩種策略. 第一個是編寫另一個函數, 使用簡單和清晰的算法, 雖然效率較低但是行爲和要測試的函數一致, 然後針對相同的隨機輸入檢査兩者的輸出結果. 第二種是生成的隨機輸入的數據遵循特定的模式, 這樣我們就可以知道期望的輸出的模式.

下面的例子使用的是第二種方法: randomPalindrome 函數用於隨機生成迴文字符串.

import "math/rand"
 
@@ -2217,7 +2221,7 @@ ok      gopl.io/ch11/word2      0.015s
     }
 }
 
-

雖然隨機測試有不確定因素, 但是它也是至關重要的, 我們可以從失敗測試的日誌穫取足夠的信息. 在我們的例子中, 輸入 IsPalindrome 的 p 參數將告訴我們眞實的數據, 但是對於函數將接受更複雜的輸入, 不需要保存所有的輸入, 隻要日誌中簡單地記録隨機數種子卽可(像上面的方式). 有了這些隨機數初始化種子, 我們可以很容易脩改測試代碼以重現失敗的隨機測試.

+

雖然隨機測試有不確定因素, 但是它也是至關重要的, 我們可以從失敗測試的日誌獲取足夠的信息. 在我們的例子中, 輸入 IsPalindrome 的 p 參數將告訴我們眞實的數據, 但是對於函數將接受更複雜的輸入, 不需要保存所有的輸入, 隻要日誌中簡單地記録隨機數種子卽可(像上面的方式). 有了這些隨機數初始化種子, 我們可以很容易脩改測試代碼以重現失敗的隨機測試.

通過使用當前時間作爲隨機種子, 在整個過程中的每次運行測試命令時都將探索新的隨機數據. 如果你使用的是定期運行的自動化測試集成繫統, 隨機測試將特别有價值.

練習 11.3: TestRandomPalindromes 隻測試了迴文字符串. 編寫新的隨機測試生成器, 用於測試隨機生成的非迴文字符串.

練習 11.4: 脩改 randomPalindrome 函數, 以探索 IsPalindrome 對標點和空格的處理.

@@ -2259,7 +2263,7 @@ ok gopl.io/ch11/word2 0.015s return nil }
-

在測試中嗎我們可以用各種參數和標標誌調用 echo 函數, 然後檢測它的輸齣是否正確, 我們通過增加參數來減少 echo 函數對全局變量的依賴. 我們還增加了一個全局名爲 out 的變量來替代直接使用 os.Stdout, 這樣測試代碼可以根據需要將 out 脩改爲不同的對象以便於檢査. 下面就是 echo_test.go 文件中的測試代碼:

+

在測試中嗎我們可以用各種參數和標標誌調用 echo 函數, 然後檢測它的輸出是否正確, 我們通過增加參數來減少 echo 函數對全局變量的依賴. 我們還增加了一個全局名爲 out 的變量來替代直接使用 os.Stdout, 這樣測試代碼可以根據需要將 out 脩改爲不同的對象以便於檢査. 下面就是 echo_test.go 文件中的測試代碼:

package main
 
 import (
@@ -2297,23 +2301,23 @@ ok      gopl.io/ch11/word2      0.015s
     }
 }
 
-

要註意的是測試代碼和産品代碼在同一個包. 雖然是main包, 也有對應的 main 入口函數, 但是在測試的時候 main 包隻是 TestEcho 測試函數導入的一個普通包, 里面 main 函數併沒有被導齣是被忽略的.

+

要註意的是測試代碼和産品代碼在同一個包. 雖然是main包, 也有對應的 main 入口函數, 但是在測試的時候 main 包隻是 TestEcho 測試函數導入的一個普通包, 里面 main 函數併沒有被導出是被忽略的.

通過將測試放到表格中, 我們很容易添加新的測試用例. 讓我通過增加下面的測試用例來看看失敗的情況是怎麽樣的:

{true, ",", []string{"a", "b", "c"}, "a b c\n"}, // NOTE: wrong expectation!
 
-

go test 輸齣如下:

+

go test 輸出如下:

$ go test gopl.io/ch11/echo
 --- FAIL: TestEcho (0.00s)
     echo_test.go:31: echo(true, ",", ["a" "b" "c"]) = "a,b,c", want "a b c\n"
 FAIL
 FAIL        gopl.io/ch11/echo         0.006s
 

錯誤信息描述了嚐試的操作(使用Go類似語法), 實際的行爲, 和期望的行爲. 通過這樣的錯誤信息, 你可以在檢視代碼之前就很容易定位錯誤的原因.

-

要註意的是在測試代碼中併沒有調用 log.Fatal 或 os.Exit, 因爲調用這類函數會導致程序提前退齣; 調用這些函數的特權應該放在 main 函數中. 如果眞的有以外的事情導致函數發送 panic, 測試驅動應該嚐試 recover, 然後將當前測試當作失敗處理. 如果是可預期的錯誤, 例如非法的用戶輸入, 找不到文件, 或配置文件不當等應該通過返迴一個非空的 error 的方式處理. 幸運的是(上面的意外隻是一個插麴), 我們的 echo 示例是比較簡單的也沒有需要返迴非空error的情況.

+

要註意的是在測試代碼中併沒有調用 log.Fatal 或 os.Exit, 因爲調用這類函數會導致程序提前退出; 調用這些函數的特權應該放在 main 函數中. 如果眞的有以外的事情導致函數發送 panic, 測試驅動應該嚐試 recover, 然後將當前測試當作失敗處理. 如果是可預期的錯誤, 例如非法的用戶輸入, 找不到文件, 或配置文件不當等應該通過返迴一個非空的 error 的方式處理. 幸運的是(上面的意外隻是一個插麴), 我們的 echo 示例是比較簡單的也沒有需要返迴非空error的情況.

11.2.3. 白盒測試

一個測試分類的方法是基於測試者是否需要了解被測試對象的內部工作原理. 黑盒測試隻需要測試包公開的文檔和API行爲, 內部實現對測試代碼是透明的. 相反, 白盒測試有訪問包內部函數和數據結構的權限, 因此可以做到一下普通客戶端無法實現的測試. 例如, 一個飽和測試可以在每個操作之後檢測不變量的數據類型. (白盒測試隻是一個傳統的名稱, 其實稱爲 clear box 會更準確.)

黑盒和白盒這兩種測試方法是互補的. 黑盒測試一般更健壯, 隨着軟件實現的完善測試代碼很少需要更新. 它們可以幫助測試者了解眞是客戶的需求, 可以幫助發現API設計的一些不足之處. 相反, 白盒測試則可以對內部一些棘手的實現提供更多的測試覆蓋.

-

我們已經看到兩種測試的例子. TestIsPalindrome 測試僅僅使用導齣的 IsPalindrome 函數, 因此它是一個黑盒測試. TestEcho 測試則調用了內部的 echo 函數, 併且更新了內部的 out 全局變量, 這兩個都是未導齣的, 因此它是白盒測試.

-

當我們開發TestEcho測試的時候, 我們脩改了 echo 函數使用包級的 out 作爲輸齣對象, 因此測試代碼可以用另一個實現代替標準輸齣, 這樣可以方便對比 echo 的輸齣數據. 使用類似的技術, 我們可以將産品代碼的其他部分也替換爲一個容易測試的僞對象. 使用僞對象的好處是我們可以方便配置, 容易預測, 更可靠, 也更容易觀察. 同時也可以避免一些不良的副作用, 例如更新生産數據庫或信用卡消費行爲.

+

我們已經看到兩種測試的例子. TestIsPalindrome 測試僅僅使用導出的 IsPalindrome 函數, 因此它是一個黑盒測試. TestEcho 測試則調用了內部的 echo 函數, 併且更新了內部的 out 全局變量, 這兩個都是未導出的, 因此它是白盒測試.

+

當我們開發TestEcho測試的時候, 我們脩改了 echo 函數使用包級的 out 作爲輸出對象, 因此測試代碼可以用另一個實現代替標準輸出, 這樣可以方便對比 echo 的輸出數據. 使用類似的技術, 我們可以將産品代碼的其他部分也替換爲一個容易測試的僞對象. 使用僞對象的好處是我們可以方便配置, 容易預測, 更可靠, 也更容易觀察. 同時也可以避免一些不良的副作用, 例如更新生産數據庫或信用卡消費行爲.

下面的代碼演示了爲用戶提供網絡存儲的web服務中的配額檢測邏輯. 當用戶使用了超過 90% 的存儲配額之後將發送提醒郵件.

gopl.io/ch11/storage1
 
@@ -2440,17 +2444,17 @@ FAIL        gopl.io/ch11/echo         0.006s
 

XTestGoFiles 表示的是屬於測試擴展包的測試代碼, 也就是 fmt_test 包, 因此它們必鬚先導入 fmt 包. 同樣, 這些文件也隻是在測試時被構建運行:

$ go list -f={{.XTestGoFiles}} fmt
 [fmt_test.go scan_test.go stringer_test.go]
-

有時候測試擴展包需要訪問被測試包內部的代碼, 例如在一個爲了避免循環導入而被獨立到外部測試擴展包的白盒測試. 在這種情況下, 我們可以通過一些技巧解決: 我們在包內的一個 _test.go 文件中導齣一個內部的實現給測試擴展包. 因爲這些代碼隻有在測試時纔需要, 因此一般放在 export_test.go 文件中.

+

有時候測試擴展包需要訪問被測試包內部的代碼, 例如在一個爲了避免循環導入而被獨立到外部測試擴展包的白盒測試. 在這種情況下, 我們可以通過一些技巧解決: 我們在包內的一個 _test.go 文件中導出一個內部的實現給測試擴展包. 因爲這些代碼隻有在測試時才需要, 因此一般放在 export_test.go 文件中.

例如, fmt 包的 fmt.Scanf 需要 unicode.IsSpace 函數提供的功能. 但是爲了避免太多的依賴, fmt 包併沒有導入包含鉅大表格數據的 unicode 包; 相反fmt包有一個叫 isSpace 內部的簡易實現.

-

爲了確保 fmt.isSpace 和 unicode.IsSpace 函數的行爲一致, fmt 包謹慎地包含了一個測試. 是一個在測試擴展包內的測試, 因此是無法直接訪問到 isSpace 內部函數的, 因此 fmt 通過一個祕密齣口導齣了 isSpace 函數. export_test.go 文件就是專門用於測試擴展包的祕密齣口.

+

爲了確保 fmt.isSpace 和 unicode.IsSpace 函數的行爲一致, fmt 包謹慎地包含了一個測試. 是一個在測試擴展包內的測試, 因此是無法直接訪問到 isSpace 內部函數的, 因此 fmt 通過一個祕密出口導出了 isSpace 函數. export_test.go 文件就是專門用於測試擴展包的祕密出口.

package fmt
 
 var IsSpace = isSpace
 
-

這個測試文件併沒有定義測試代碼; 它隻是通過 fmt.IsSpace 簡單導齣了內部的 isSpace 函數, 提供給測試擴展包使用. 這個技巧可以廣泛用於位於測試擴展包的白盒測試.

+

這個測試文件併沒有定義測試代碼; 它隻是通過 fmt.IsSpace 簡單導出了內部的 isSpace 函數, 提供給測試擴展包使用. 這個技巧可以廣泛用於位於測試擴展包的白盒測試.

11.2.5. 編寫有效的測試

-

許多Go新人會驚異與它的極簡的測試框架. 很多其他語言的測試框架都提供了識别測試函數的機製(通常使用反射或元數據), 通過設置一些 ‘‘setup’’ 和 ‘‘teardown’’ 的鉤子函數來執行測試用例運行的初始化或之後的清理操作, 同時測試工具箱還提供了很多類似assert斷言, 比較值, 格式化輸齣錯誤信息和停止一個識别的測試等輔助函數(通常使用異常機製). 雖然這些機製可以使得測試非常簡潔, 但是測試輸齣的日誌卻像火星文一般難以理解. 此外, 雖然測試最終也會輸齣 PASS 或 FAIL 的報告, 但是它們提供的信息格式卻非常不利於代碼維護者快速定位問題, 因爲失敗的信息的具體含義是非常隱患的, 比如 "assert: 0 == 1" 或 成頁的海量跟蹤日誌.

-

Go語言的測試風格則形成鮮明對比. 它期望測試者自己完成大部分的工作, 定義函數避免重複, 就像普通編程那樣. 編寫測試併不是一個機械的填充過程; 一個測試也有自己的接口, 盡管它的維護者也是測試僅有的一個用戶. 一個好的測試不應該引發其他無關的錯誤信息, 它隻要清晰簡潔地描述問題的癥狀卽可, 有時候可能還需要一些上下文信息. 在理想情況下, 維護者可以在不看代碼的情況下就能根據錯誤信息定位錯誤産生的原因. 一個好的測試不應該在遇到一點小錯誤就立刻退齣測試, 它應該嚐試報告更多的測試, 因此我們可能從多個失敗測試的模式中發現錯誤産生的規律.

+

許多Go新人會驚異與它的極簡的測試框架. 很多其他語言的測試框架都提供了識别測試函數的機製(通常使用反射或元數據), 通過設置一些 ‘‘setup’’ 和 ‘‘teardown’’ 的鉤子函數來執行測試用例運行的初始化或之後的清理操作, 同時測試工具箱還提供了很多類似assert斷言, 比較值, 格式化輸出錯誤信息和停止一個識别的測試等輔助函數(通常使用異常機製). 雖然這些機製可以使得測試非常簡潔, 但是測試輸出的日誌卻像火星文一般難以理解. 此外, 雖然測試最終也會輸出 PASS 或 FAIL 的報告, 但是它們提供的信息格式卻非常不利於代碼維護者快速定位問題, 因爲失敗的信息的具體含義是非常隱患的, 比如 "assert: 0 == 1" 或 成頁的海量跟蹤日誌.

+

Go語言的測試風格則形成鮮明對比. 它期望測試者自己完成大部分的工作, 定義函數避免重複, 就像普通編程那樣. 編寫測試併不是一個機械的填充過程; 一個測試也有自己的接口, 盡管它的維護者也是測試僅有的一個用戶. 一個好的測試不應該引發其他無關的錯誤信息, 它隻要清晰簡潔地描述問題的癥狀卽可, 有時候可能還需要一些上下文信息. 在理想情況下, 維護者可以在不看代碼的情況下就能根據錯誤信息定位錯誤産生的原因. 一個好的測試不應該在遇到一點小錯誤就立刻退出測試, 它應該嚐試報告更多的測試, 因此我們可能從多個失敗測試的模式中發現錯誤産生的規律.

下面的斷言函數比較兩個值, 然後生成一個通用的錯誤信息, 併停止程序. 它很方便使用也確實有效果, 但是當識别的時候, 錯誤時打印的信息幾乎是沒有價值的. 它併沒有爲解決問題提供一個很好的入口.

import (
     "fmt"
@@ -2469,7 +2473,7 @@ FAIL        gopl.io/ch11/echo         0.006s
     // ...
 }
 
-

從這個意義上説, 斷言函數犯了過早抽象的錯誤: 僅僅測試兩個整數是否相同, 而放棄了根據上下文提供更有意義的錯誤信息的做法. 我們可以根據具體的錯誤打印一個更有價值的錯誤信息, 就像下面例子那樣. 測試在隻有一次重複的模式齣現時引入抽象.

+

從這個意義上説, 斷言函數犯了過早抽象的錯誤: 僅僅測試兩個整數是否相同, 而放棄了根據上下文提供更有意義的錯誤信息的做法. 我們可以根據具體的錯誤打印一個更有價值的錯誤信息, 就像下面例子那樣. 測試在隻有一次重複的模式出現時引入抽象.

func TestSplit(t *testing.T) {
     s, sep := "a:b:c", ":"
     words := strings.Split(s, sep)
@@ -2481,12 +2485,12 @@ FAIL        gopl.io/ch11/echo         0.006s
 }
 

現在的測試不僅報告了調用的具體函數, 它的輸入, 和結果的意義; 併且打印的眞實返迴的值和期望返迴的值; 併且卽使斷言失敗依然會繼續嚐試運行更多的測試. 一旦我們寫了這樣結構的測試, 下一步自然不是用更多的if語句來擴展測試用例, 我們可以用像 IsPalindrome 的表驅動測試那樣來準備更多的 s, sep 測試用例.

-

前面的例子併不需要額外的輔助函數, 如果如果有可以使測試代碼更簡單的方法我們也樂意接受. (我們將在 13.3節 看到一個 reflect.DeepEqual 輔助函數.) 開始一個好的測試的關鍵是通過實現你眞正想要的具體行爲, 然後纔是考慮然後簡化測試代碼. 最好的結果是直接從庫的抽象接口開始, 針對公共接口編寫一些測試函數.

-

練習11.5: 用表格驅動的技術擴展TestSplit測試, 併打印期望的輸齣結果.

+

前面的例子併不需要額外的輔助函數, 如果如果有可以使測試代碼更簡單的方法我們也樂意接受. (我們將在 13.3節 看到一個 reflect.DeepEqual 輔助函數.) 開始一個好的測試的關鍵是通過實現你眞正想要的具體行爲, 然後才是考慮然後簡化測試代碼. 最好的結果是直接從庫的抽象接口開始, 針對公共接口編寫一些測試函數.

+

練習11.5: 用表格驅動的技術擴展TestSplit測試, 併打印期望的輸出結果.

11.2.6. 避免的不穩定的測試

-

如果一個應用程序對於新齣現的但有效的輸入經常失敗説明程序不夠穩健; 同樣如果一個測試僅僅因爲聲音變化就會導致失敗也是不合邏輯的. 就像一個不夠穩健的程序會挫敗它的用戶一樣, 一個脆弱性測試同樣會激怒它的維護者. 最脆弱的測試代碼會在程序沒有任何變化的時候産生不同的結果, 時好時壞, 處理它們會耗費大量的時間但是併不會得到任何好處.

-

當一個測試函數産生一個複雜的輸齣如一個很長的字符串, 或一個精心設計的數據結構, 或一個文件, 它可以用於和預設的‘‘golden’’結果數據對比, 用這種簡單方式寫測試是誘人的. 但是隨着項目的發展, 輸齣的某些部分很可能會發生變化, 盡管很可能是一個改進的實現導致的. 而且不僅僅是輸齣部分, 函數複雜複製的輸入部分可能也跟着變化了, 因此測試使用的輸入也就不在有效了.

-

避免脆弱測試代碼的方法是隻檢測你眞正關心的屬性. 保存測試代碼的簡潔和內部結構的穩定. 特别是對斷言部分要有所選擇. 不要檢査字符串的全匹配, 但是尋找相關的子字符串, 因爲某些子字符串在項目的發展中是比較穩定不變的. 通常編寫一個重複雜的輸齣中提取必要精華信息以用於斷言是值得的, 雖然這可能會帶來很多前期的工作, 但是它可以幫助迅速及時脩複因爲項目演化而導致的不合邏輯的失敗測試.

+

如果一個應用程序對於新出現的但有效的輸入經常失敗説明程序不夠穩健; 同樣如果一個測試僅僅因爲聲音變化就會導致失敗也是不合邏輯的. 就像一個不夠穩健的程序會挫敗它的用戶一樣, 一個脆弱性測試同樣會激怒它的維護者. 最脆弱的測試代碼會在程序沒有任何變化的時候産生不同的結果, 時好時壞, 處理它們會耗費大量的時間但是併不會得到任何好處.

+

當一個測試函數産生一個複雜的輸出如一個很長的字符串, 或一個精心設計的數據結構, 或一個文件, 它可以用於和預設的‘‘golden’’結果數據對比, 用這種簡單方式寫測試是誘人的. 但是隨着項目的發展, 輸出的某些部分很可能會發生變化, 盡管很可能是一個改進的實現導致的. 而且不僅僅是輸出部分, 函數複雜複製的輸入部分可能也跟着變化了, 因此測試使用的輸入也就不在有效了.

+

避免脆弱測試代碼的方法是隻檢測你眞正關心的屬性. 保存測試代碼的簡潔和內部結構的穩定. 特别是對斷言部分要有所選擇. 不要檢査字符串的全匹配, 但是尋找相關的子字符串, 因爲某些子字符串在項目的發展中是比較穩定不變的. 通常編寫一個重複雜的輸出中提取必要精華信息以用於斷言是值得的, 雖然這可能會帶來很多前期的工作, 但是它可以幫助迅速及時脩複因爲項目演化而導致的不合邏輯的失敗測試.

@@ -2518,7 +2522,7 @@ FAIL gopl.io/ch11/echo 0.006s diff --git a/ch11/ch11-03.html b/ch11/ch11-03.html index fa65d5c..f6d4d8c 100644 --- a/ch11/ch11-03.html +++ b/ch11/ch11-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2080,7 +2084,7 @@ Open a web browser displaying annotated source code:

現在我們可以用 -coverprofile 標誌參數重新運行:

$ go test -run=Coverage -coverprofile=c.out gopl.io/ch7/eval
 ok      gopl.io/ch7/eval         0.032s      coverage: 68.5% of statements
-

這個標誌參數通過插入生成鉤子代碼來統計覆蓋率數據. 也就是説, 在運行每個測試前, 它會脩改要測試代碼的副本, 在每個塊都會設置一個布爾標誌變量. 當被脩改後的被測試代碼運行退齣時, 將統計日誌數據寫入 c.out 文件, 併打印一部分執行的語句的一個總結. (如果你需要的是摘要,使用 go test -cover.)

+

這個標誌參數通過插入生成鉤子代碼來統計覆蓋率數據. 也就是説, 在運行每個測試前, 它會脩改要測試代碼的副本, 在每個塊都會設置一個布爾標誌變量. 當被脩改後的被測試代碼運行退出時, 將統計日誌數據寫入 c.out 文件, 併打印一部分執行的語句的一個總結. (如果你需要的是摘要,使用 go test -cover.)

如果使用了 -covermode=count 標誌參數, 那麽將在每個代碼塊插入一個計數器而不是布爾標誌量. 在統計結果中記録了每個塊的執行次數, 這可以用於衡量哪些是被頻繁執行的熱點代碼.

爲了收集數據, 我們運行了測試覆蓋率工具, 打印了測試日誌, 生成一個HTML報告, 然後在瀏覽器中打開(圖11.3).

$ go tool cover -html=c.out
@@ -2120,7 +2124,7 @@ ok      gopl.io/ch7/eval         0.032s      coverage: 68.5% of statements
 
 
diff --git a/ch11/ch11-04.html b/ch11/ch11-04.html
index f20bf25..d32b272 100644
--- a/ch11/ch11-04.html
+++ b/ch11/ch11-04.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2085,7 +2089,7 @@ BenchmarkIsPalindrome 2000000 807 ns/op 128 B/op 1 allocs/op

通過函數參數來指定輸入的大小, 但是參數變量對於每個具體的基準測試都是固定的. 要避免直接脩改 b.N 來控製輸入的大小. 除非你將它作爲一個固定大小的迭代計算輸入, 否則基準測試的結果將毫無意義.

基準測試對於編寫代碼是很有幫助的, 但是卽使工作完成了應應當保存基準測試代碼. 因爲隨着項目的發展, 或者是輸入的增加, 或者是部署到新的操作繫統或不同的處理器, 我們可以再次用基準測試來幫助我們改進設計.

練習 11.6: 爲 2.6.2節 的 練習 2.4 和 練習 2.5 的 PopCount 函數編寫基準測試. 看看基於表格算法在不同情況下的性能.

-

練習 11.7: 爲 *IntSet (§6.5) 的 Add, UnionWith 和 其他方法編寫基準測試, 使用大量隨機齣入. 你可以讓這些方法跑多快? 選擇字的大小對於性能的影響如何? IntSet 和基於內建 map 的實現相比有多快?

+

練習 11.7: 爲 *IntSet (§6.5) 的 Add, UnionWith 和 其他方法編寫基準測試, 使用大量隨機出入. 你可以讓這些方法跑多快? 選擇字的大小對於性能的影響如何? IntSet 和基於內建 map 的實現相比有多快?

@@ -2117,7 +2121,7 @@ BenchmarkIsPalindrome 2000000 807 ns/op 128 B/op 1 allocs/op diff --git a/ch11/ch11-05.html b/ch11/ch11-05.html index aa03f73..1c31437 100644 --- a/ch11/ch11-05.html +++ b/ch11/ch11-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2023,13 +2027,13 @@

測量基準對於衡量特定操作的性能是有幫助的, 但是, 當我們視圖讓程序跑的更快的時候, 我們通常併不知道從哪里開始優化. 每個碼農都應該知道 Donald Knuth 在1974年的 ‘‘Structured Programming with go to Statements’’ 上所説的格言. 雖然經常被解讀爲不重視性能的意思, 但是從原文我們可以看到不同的含義:

毫無疑問, 效率會導致各種濫用. 程序員需要浪費大量的時間思考, 或者擔心, 被部分程序的速度所榦擾, 實際上這些嚐試提陞效率的行爲可能産生強烈的負面影響, 特别是當調試和維護的時候. 我們不應該過度糾結於細節的優化, 應該説約97%的場景: 過早的優化是萬惡之源.

-

我們當然不應該放棄那關鍵的3%的機會. 一個好的程序員不會因爲這個理由而滿足, 他們會明智地觀察和識别哪些是關鍵的代碼; 但是隻有在關鍵代碼已經被確認的前提下纔會進行優化. 對於判斷哪些部分是關鍵代碼是經常容易犯經驗性錯誤的地方, 因此程序員普通使用的測量工具, 使得他們的直覺很不靠譜.

+

我們當然不應該放棄那關鍵的3%的機會. 一個好的程序員不會因爲這個理由而滿足, 他們會明智地觀察和識别哪些是關鍵的代碼; 但是隻有在關鍵代碼已經被確認的前提下才會進行優化. 對於判斷哪些部分是關鍵代碼是經常容易犯經驗性錯誤的地方, 因此程序員普通使用的測量工具, 使得他們的直覺很不靠譜.

當我們想仔細觀察我們程序的運行速度的時候, 最好的技術是如何識别關鍵代碼. 自動化的剖析技術是基於程序執行期間一些抽樣數據, 然後推斷後面的執行狀態; 最終産生一個運行時間的統計數據文件.

Go語言支持多種類型的剖析性能分析, 每一種關註不同的方面, 但它們都涉及到每個采樣記録的感興趣的一繫列事件消息, 每個事件都包含函數調用時函數調用堆棧的信息. 內建的 go test 工具對幾種分析方式都提供了支持.

CPU分析文件標識了函數執行時所需要的CPU時間. 當前運行的繫統線程在每隔幾毫秒都會遇到操作繫統的中斷事件, 每次中斷時都會記録一個分析文件然後恢複正常的運行.

堆分析則記録了程序的內存使用情況. 每個內存分配操作都會觸發內部平均內存分配例程, 每個 512KB 的內存申請都會觸發一個事件.

-

阻塞分析則記録了goroutine最大的阻塞操作, 例如繫統調用, 管道發送和接收, 還有穫取鎖等. 分析庫會記録每個goroutine被阻塞時的相關操作.

+

阻塞分析則記録了goroutine最大的阻塞操作, 例如繫統調用, 管道發送和接收, 還有獲取鎖等. 分析庫會記録每個goroutine被阻塞時的相關操作.

在測試環境下隻需要一個標誌參數就可以生成各種分析文件. 當一次使用多個標誌參數時需要當心, 因爲分析操作本身也可能會影像程序的運行.

$ go test -cpuprofile=cpu.out 
 $ go test -blockprofile=block.out 
@@ -2060,7 +2064,7 @@ Showing top 10 nodes out of 166 (cum >= 60ms)
     60ms  1.67% 68.80%   190ms  5.29%  math/big.nat.montgomery
     50ms  1.39% 70.19%    50ms  1.39%  crypto/elliptic.p256ReduceCarry
     50ms  1.39% 71.59%    60ms  1.67%  crypto/elliptic.p256Sum
-

參數 -text 標誌參數用於指定輸齣格式, 在這里每行是一個函數, 根據使用CPU的時間來排序. 其中 -nodecount=10 標誌參數限製了隻輸齣前10行的結果. 對於嚴重的性能問題, 這個文本格式基本可以幫助査明原因了.

+

參數 -text 標誌參數用於指定輸出格式, 在這里每行是一個函數, 根據使用CPU的時間來排序. 其中 -nodecount=10 標誌參數限製了隻輸出前10行的結果. 對於嚴重的性能問題, 這個文本格式基本可以幫助査明原因了.

這個概要文件告訴我們, HTTPS基準測試中 crypto/elliptic.p256ReduceDegree 函數占用了將近一般的CPU資源. 相比之下, 如果一個概要文件中主要是runtime包的內存分配的函數, 那麽減少內存消耗可能是一個值得嚐試的優化策略.

對於一些更微妙的問題, 你可能需要使用 pprof 的圖形顯示功能. 這個需要安裝 GraphViz 工具, 可以從 www.graphviz.org 下載. 參數 -web 用於生成一個有向圖文件, 包含CPU的使用和最特點的函數等信息.

這一節我們隻是簡單看了下Go語言的分析據工具. 如果想了解更多, 可以閲讀 Go官方博客的 ‘‘Profiling Go Programs’’ 一文.

@@ -2095,7 +2099,7 @@ Showing top 10 nodes out of 166 (cum >= 60ms) diff --git a/ch11/ch11-06.html b/ch11/ch11-06.html index 92ea44a..3c2c3af 100644 --- a/ch11/ch11-06.html +++ b/ch11/ch11-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2031,7 +2035,7 @@

示例函數有三個用處. 最主要的一個是用於文檔: 一個包的例子可以更簡潔直觀的方式來演示函數的用法, 會文字描述會更直接易懂, 特别是作爲一個提醒或快速參考時. 一個例子函數也可以方便展示屬於同一個接口的幾種類型或函數直接的關繫, 所有的文檔都必鬚關聯到一個地方, 就像一個類型或函數聲明都統一到包一樣. 同時, 示例函數和註釋併不一樣, 示例函數是完整眞是的Go代碼, 需要介紹編譯器的編譯時檢査, 這樣可以保證示例代碼不會腐爛成不能使用的舊代碼.

根據示例函數的後綴名部分, godoc 的web文檔會將一個示例函數關聯到某個具體函數或包本身, 因此 ExampleIsPalindrome 示例函數將是 IsPalindrome 函數文檔的一部分, Example 示例函數將是包文檔的一部分.

-

示例文檔的第二個用處是在 go test 執行測試的時候也運行示例函數測試. 如果示例函數內含有類似上面例子中的 / Output: 這樣的註釋, 那麽測試工具會執行這個示例函數, 然後檢測這個示例函數的標準輸齣和註釋是否匹配.

+

示例文檔的第二個用處是在 go test 執行測試的時候也運行示例函數測試. 如果示例函數內含有類似上面例子中的 / Output: 這樣的註釋, 那麽測試工具會執行這個示例函數, 然後檢測這個示例函數的標準輸出和註釋是否匹配.

示例函數的第三個目的提供一個眞實的演練場. golang.org 是由 dogoc 提供的服務, 它使用了 Go Playground 技術讓用戶可以在瀏覽器中在線編輯和運行每個示例函數, 就像 圖 11.4 所示的那樣. 這通常是學習函數使用或Go語言特性的最快方式.

本書最後的兩掌是討論 reflect 和 unsafe 包, 一般的Go用於很少需要使用它們. 因此, 如果你還沒有寫過任何眞是的Go程序的話, 現在可以忽略剩餘部分而直接編碼了.

@@ -2066,7 +2070,7 @@ diff --git a/ch11/ch11.html b/ch11/ch11.html index 15bda67..17209ba 100644 --- a/ch11/ch11.html +++ b/ch11/ch11.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2025,7 +2029,7 @@

我們説測試的時候一般是指自動化測試, 也就是寫一些小的程序用來檢測被測試代碼(産品代碼)的行爲和預期的一樣, 這些通常都是精心挑選的執行某些特定的功能或者是通過隨機性的輸入要驗證邊界的處理.

軟件測試是一個鉅大的領域. 測試的任務一般占據了一些程序員的部分時間和另一些程序員的全部時間. 和軟件測試技術相關的圖書或博客文章有成韆上萬之多. 每一種主流的編程語言, 都有一打的用於測試的軟件包, 也有大量的測試相關的理論, 每種都吸引了大量技術先驅和追隨者. 這些都足以説服那些想要編寫有效測試的程序員重新學習一套全新的技能.

Go語言的測試技術是相對低級的. 它依賴一個 'go test' 測試命令, 和一組按照約定方式編寫的測試函數, 測試命令可以運行測試函數. 編寫相對輕量級的純測試代碼是有效的, 而且它很容易延伸到基準測試和示例文檔.

-

在實踐中, 編寫測試代碼和編寫程序本身併沒有多大區别. 我們編寫的每一個函數也是針對每個具體的任務. 我們必鬚小心處理邊界條件, 思考合適的數據結構, 推斷合適的輸入應該産生什麽樣的結果輸齣. 編程測試代碼和編寫普通的Go代碼過程是類似的; 它併不需要學習新的符號, 規則和工具.

+

在實踐中, 編寫測試代碼和編寫程序本身併沒有多大區别. 我們編寫的每一個函數也是針對每個具體的任務. 我們必鬚小心處理邊界條件, 思考合適的數據結構, 推斷合適的輸入應該産生什麽樣的結果輸出. 編程測試代碼和編寫普通的Go代碼過程是類似的; 它併不需要學習新的符號, 規則和工具.

@@ -2057,7 +2061,7 @@ diff --git a/ch12/ch12-01.html b/ch12/ch12-01.html index 4ba4eff..ab0065d 100644 --- a/ch12/ch12-01.html +++ b/ch12/ch12-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2046,7 +2050,7 @@ } } -

但是我們如何處理其它類似 []float64, map[string][]string 等類型呢? 我們當然可以添加更多的測試分支, 但是這些組合類型的數目基本是無窮的. 還有如何處理 url.Values 等命令的類型呢? 雖然類型分支可以識别齣底層的基礎類型是 map[string][]string, 但是它併不匹配 url.Values 類型, 因爲這是兩種不同的類型, 而且 switch 分支也不可能包含每個類似 url.Values 的類型, 這會導致對這些庫的依賴.

+

但是我們如何處理其它類似 []float64, map[string][]string 等類型呢? 我們當然可以添加更多的測試分支, 但是這些組合類型的數目基本是無窮的. 還有如何處理 url.Values 等命令的類型呢? 雖然類型分支可以識别出底層的基礎類型是 map[string][]string, 但是它併不匹配 url.Values 類型, 因爲這是兩種不同的類型, 而且 switch 分支也不可能包含每個類似 url.Values 的類型, 這會導致對這些庫的依賴.

沒有一種方法來檢査未知類型的表示方式, 我們被卡住了. 這就是我們爲何需要反射的原因.

@@ -2079,7 +2083,7 @@ diff --git a/ch12/ch12-02.html b/ch12/ch12-02.html index 040874e..75106be 100644 --- a/ch12/ch12-02.html +++ b/ch12/ch12-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2031,7 +2035,7 @@ fmt.Println(t) // "int"
var w io.Writer = os.Stdout
 fmt.Println(reflect.TypeOf(w)) // "*os.File"
 
-

要註意的是 reflect.Type 接口是滿足 fmt.Stringer 接口的. 因爲打印動態類型值對於調試和日誌是有幫助的, fmt.Printf 提供了一個簡短的 %T 標誌參數, 內部使用 reflect.TypeOf 的結果輸齣:

+

要註意的是 reflect.Type 接口是滿足 fmt.Stringer 接口的. 因爲打印動態類型值對於調試和日誌是有幫助的, fmt.Printf 提供了一個簡短的 %T 標誌參數, 內部使用 reflect.TypeOf 的結果輸出:

fmt.Printf("%T\n", 3) // "int"
 

reflect 包中另一個重要的類型是 Value. 一個 reflect.Value 可以持有一個任意類型的值. 函數 reflect.ValueOf 接受任意的 interface{} 類型, 併返迴對應動態類型的reflect.Value. 和 reflect.TypeOf 類似, reflect.ValueOf 返迴的結果也是對於具體的類型, 但是 reflect.Value 也可以持有一個接口值.

@@ -2051,7 +2055,7 @@ x := v.Interface() // an interface{} i := x.(int) // an int fmt.Printf("%d\n", i) // "3" -

一個 reflect.Value 和 interface{} 都能保存任意的值. 所不同的是, 一個空的接口隱藏了值對應的表示方式和所有的公開的方法, 因此隻有我們知道具體的動態類型纔能使用類型斷言來訪問內部的值(就像上面那樣), 對於內部值併沒有特别可做的事情. 相比之下, 一個 Value 則有很多方法來檢査其內容, 無論它的具體類型是什麽. 讓我們再次嚐試實現我們的格式化函數 format.Any.

+

一個 reflect.Value 和 interface{} 都能保存任意的值. 所不同的是, 一個空的接口隱藏了值對應的表示方式和所有的公開的方法, 因此隻有我們知道具體的動態類型才能使用類型斷言來訪問內部的值(就像上面那樣), 對於內部值併沒有特别可做的事情. 相比之下, 一個 Value 則有很多方法來檢査其內容, 無論它的具體類型是什麽. 讓我們再次嚐試實現我們的格式化函數 format.Any.

我們使用 reflect.Value 的 Kind 方法來替代之前的類型 switch. 雖然還是有無窮多的類型, 但是它們的kinds類型卻是有限的: Bool, String 和 所有數字類型的基礎類型; Array 和 Struct 對應的聚合類型; Chan, Func, Ptr, Slice, 和 Map 對應的引用類似; 接口類型; 還有表示空值的無效類型. (空的 reflect.Value 對應 Invalid 無效類型.)

gopl.io/ch12/format
 package format
@@ -2129,7 +2133,7 @@ fmt.Println(format.Any([]time.Duration{d})) // "
 
 
diff --git a/ch12/ch12-03.html b/ch12/ch12-03.html
index d1262b9..a5e25d6 100644
--- a/ch12/ch12-03.html
+++ b/ch12/ch12-03.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-04.html b/ch12/ch12-04.html index 45225d9..80804f3 100644 --- a/ch12/ch12-04.html +++ b/ch12/ch12-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-05.html b/ch12/ch12-05.html index 2d4cadc..14ca27a 100644 --- a/ch12/ch12-05.html +++ b/ch12/ch12-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-06.html b/ch12/ch12-06.html index 0adc5bb..eb4b281 100644 --- a/ch12/ch12-06.html +++ b/ch12/ch12-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2034,7 +2038,7 @@ - +
@@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-07.html b/ch12/ch12-07.html index c26021f..c19b66c 100644 --- a/ch12/ch12-07.html +++ b/ch12/ch12-07.html @@ -5,7 +5,7 @@ - 穫取結構體字段標識 | Go编程语言 + 獲取結構體字段標識 | Go编程语言 @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,7 +2023,7 @@
-

12.7. 穫取結構體字段標識

+

12.7. 獲取結構體字段標識

TODO

@@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-08.html b/ch12/ch12-08.html index d3c926e..aefa842 100644 --- a/ch12/ch12-08.html +++ b/ch12/ch12-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2031,7 +2035,7 @@
- + @@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12-09.html b/ch12/ch12-09.html index 3ebc145..1b401d2 100644 --- a/ch12/ch12-09.html +++ b/ch12/ch12-09.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch12/ch12.html b/ch12/ch12.html index edc22c0..08696ee 100644 --- a/ch12/ch12.html +++ b/ch12/ch12.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2053,7 +2057,7 @@ diff --git a/ch13/ch13-01.html b/ch13/ch13-01.html index 2dc68ee..963a142 100644 --- a/ch13/ch13-01.html +++ b/ch13/ch13-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2024,7 +2028,7 @@
import "unsafe"
 fmt.Println(unsafe.Sizeof(float64(0))) // "8"
 
-

Sizeof函數返迴的大小隻包括數據結構中固定的部分,例如字符串對應結構體中的指針和字符串長度部分,但是併不包含指針指向的字符串的內容。Go語言中非聚合類型通常有一個固定的大小,盡管在不同工具鏈下生成的實際大小可能會有所不同。考慮到可移植性,引用類型或包含引用類型的大小在32位平颱上是4個字節,在64位平颱上是8個字節。

+

Sizeof函數返迴的大小隻包括數據結構中固定的部分,例如字符串對應結構體中的指針和字符串長度部分,但是併不包含指針指向的字符串的內容。Go語言中非聚合類型通常有一個固定的大小,盡管在不同工具鏈下生成的實際大小可能會有所不同。考慮到可移植性,引用類型或包含引用類型的大小在32位平台上是4個字節,在64位平台上是8個字節。

計算機在加載和保存數據時,如果內存地址合理地對齊的將會更有效率。例如2字節大小的int16類型的變量地址應該是偶數,一個4字節大小的rune類型變量的地址應該是4的倍數,一個8字節大小的float64、uint64或64-bit指針類型變量的地址應該是8字節對齊的。但是對於再大的地址對齊倍數則是不需要的,卽使是complex128等較大的數據類型最多也隻是8字節對齊。

由於地址對齊這個因素,一個聚合類型(結構體或數組)的大小至少是所有字段或元素大小的總和,或者更大因爲可能存在內存空洞。內存空洞是編譯器自動添加的沒有被使用的內存空間,用於保證後面每個字段或元素的地址相對於結構或數組的開始地址能夠合理地對齊(譯註:內存空洞可能會存在一些隨機數據,可能會對用unsafe包直接操作內存的處理産生影響)。

@@ -2083,7 +2087,7 @@ fmt.Println(unsafe.Sizeof(float64(struct{ float64; int16; bool } // 2 words 3wordsstruct{ bool; int16; float64 } // 2 words 3words -

關於內存地址對齊算法的細節超齣了本書的范圍,也不是每一個結構體都需要擔心這個問題,不過有效的包裝可以使數據結構更加緊湊(譯註:未來的Go語言編譯器應該會默認優化結構體的順序,當然用於應該也能夠指定具體的內存布局,相同討論請參考 Issue10014 ),內存使用率和性能都可能會受益。

+

關於內存地址對齊算法的細節超出了本書的范圍,也不是每一個結構體都需要擔心這個問題,不過有效的包裝可以使數據結構更加緊湊(譯註:未來的Go語言編譯器應該會默認優化結構體的順序,當然用於應該也能夠指定具體的內存布局,相同討論請參考 Issue10014 ),內存使用率和性能都可能會受益。

unsafe.Alignof 函數返迴對應參數的類型需要對齊的倍數. 和 Sizeof 類似, Alignof 也是返迴一個常量表達式, 對應一個常量. 通常情況下布爾和數字類型需要對齊到它們本身的大小(最多8個字節), 其它的類型對齊到機器字大小.

unsafe.Offsetof 函數的參數必鬚是一個字段 x.f, 然後返迴 f 字段相對於 x 起始地址的偏移量, 包括可能的空洞.

圖 13.1 顯示了一個結構體變量 x 以及其在32位和64位機器上的典型的內存. 灰色區域是空洞.

@@ -2137,7 +2141,7 @@ Sizeof(x.c) = 24 Alignof(x.c) = 8 Offsetof(x.c) = 8 diff --git a/ch13/ch13-02.html b/ch13/ch13-02.html index 0e5ceb8..24f130e 100644 --- a/ch13/ch13-02.html +++ b/ch13/ch13-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,7 +2024,7 @@

13.2. unsafe.Pointer

-

大多數指針類型會寫成*T,表示是“一個指向T類型變量的指針”。unsafe.Pointer是特别定義的一種指針類型(譯註:類似C語言中的void*類型的指針),它可以包含任意類型變量的地址。當然,我們不可以直接通過*p來穫取unsafe.Pointer指針指向的眞實變量的值,因爲我們併不知道變量的具體類型。和普通指針一樣,unsafe.Pointer指針也是可以比較的,併且支持和nil常量比較判斷是否爲空指針。

+

大多數指針類型會寫成*T,表示是“一個指向T類型變量的指針”。unsafe.Pointer是特别定義的一種指針類型(譯註:類似C語言中的void*類型的指針),它可以包含任意類型變量的地址。當然,我們不可以直接通過*p來獲取unsafe.Pointer指針指向的眞實變量的值,因爲我們併不知道變量的具體類型。和普通指針一樣,unsafe.Pointer指針也是可以比較的,併且支持和nil常量比較判斷是否爲空指針。

一個普通的*T類型指針可以被轉化爲unsafe.Pointer類型指針,併且一個unsafe.Pointer類型指針也可以被轉迴普通的指針,被轉迴普通的指針類型併不需要和原始的*T類型相同。通過將*float64類型指針轉化爲*uint64類型指針,我們可以査看一個浮點數變量的位模式。

package math
 
@@ -2096,7 +2100,7 @@ pb := (*int16)(unsafe.Pointer(tmp))
 
 
diff --git a/ch13/ch13-03.html b/ch13/ch13-03.html
index 2b861ae..c67dff7 100644
--- a/ch13/ch13-03.html
+++ b/ch13/ch13-03.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2074,7 +2078,7 @@ fmt.Println(reflect.DeepEqual(c, d)) // "false&q panic("unreachable") }
-

和前面的建議一樣,我們併不公開reflect包相關的接口,所以導齣的函數需要在內部自己將變量轉爲reflect.Value類型。

+

和前面的建議一樣,我們併不公開reflect包相關的接口,所以導出的函數需要在內部自己將變量轉爲reflect.Value類型。

// Equal reports whether x and y are deeply equal.
 func Equal(x, y interface{}) bool {
     seen := make(map[comparison]bool)
@@ -2086,7 +2090,7 @@ fmt.Println(reflect.DeepEqual(c, d)) // "false&q
     treflect.Type
 }
 
-

爲了確保算法對於有環的數據結構也能正常退齣,我們必鬚記録每次已經比較的變量,從而避免進入第二次的比較。Equal函數分配了一組用於比較的結構體,包含每對比較對象的地址(unsafe.Pointer形式保存)和類型。我們要記録類型的原因是,有些不同的變量可能對應相同的地址。例如,如果x和y都是數組類型,那麽x和x[0]將對應相同的地址,y和y[0]也是對應相同的地址,這可以用於區分x與y之間的比較或x[0]與y[0]之間的比較是否進行過了。

+

爲了確保算法對於有環的數據結構也能正常退出,我們必鬚記録每次已經比較的變量,從而避免進入第二次的比較。Equal函數分配了一組用於比較的結構體,包含每對比較對象的地址(unsafe.Pointer形式保存)和類型。我們要記録類型的原因是,有些不同的變量可能對應相同的地址。例如,如果x和y都是數組類型,那麽x和x[0]將對應相同的地址,y和y[0]也是對應相同的地址,這可以用於區分x與y之間的比較或x[0]與y[0]之間的比較是否進行過了。

// cycle check
 if x.CanAddr() && y.CanAddr() {
     xptr := unsafe.Pointer(x.UnsafeAddr())
@@ -2154,7 +2158,7 @@ fmt.Println(Equal(a, c)) // "false"
 
 
diff --git a/ch13/ch13-04.html b/ch13/ch13-04.html
index 66b33c4..84c3e8b 100644
--- a/ch13/ch13-04.html
+++ b/ch13/ch13-04.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2022,14 +2026,14 @@

13.4. 通過cgo調用C代碼

Go程序可能會遇到要訪問C語言的某些硬件驅動函數的場景,或者是從一個C++語言實現的嵌入式數據庫査詢記録的場景,或者是使用Fortran語言實現的一些線性代數庫的場景。C語言作爲一個通用語言,很多庫會選擇提供一個C兼容的API,然後用其他不同的編程語言實現(譯者:Go語言需要也應該擁抱這些鉅大的代碼遺産)。

在本節中,我們將構建一個簡易的數據壓縮程序,使用了一個Go語言自帶的叫cgo的用於支援C語言函數調用的工具。這類工具一般被稱爲 foreign-function interfaces (簡稱ffi), 併且在類似工具中cgo也不是唯一的。SWIG( http://swig.org )是另一個類似的且被廣泛使用的工具,SWIG提供了很多複雜特性以支援C++的特性,但SWIG併不是我們要討論的主題。

-

在標準庫的compress/...子包有很多流行的壓縮算法的編碼和解碼實現,包括流行的LZW壓縮算法(Unix的compress命令用的算法)和DEFLATE壓縮算法(GNU gzip命令用的算法)。這些包的API的細節雖然有些差異,但是它們都提供了針對 io.Writer類型輸齣的壓縮接口和提供了針對io.Reader類型輸入的解壓縮接口。例如:

+

在標準庫的compress/...子包有很多流行的壓縮算法的編碼和解碼實現,包括流行的LZW壓縮算法(Unix的compress命令用的算法)和DEFLATE壓縮算法(GNU gzip命令用的算法)。這些包的API的細節雖然有些差異,但是它們都提供了針對 io.Writer類型輸出的壓縮接口和提供了針對io.Reader類型輸入的解壓縮接口。例如:

package gzip // compress/gzip
 func NewWriter(w io.Writer) io.WriteCloser
 func NewReader(r io.Reader) (io.ReadCloser, error)
 

bzip2壓縮算法,是基於優雅的Burrows-Wheeler變換算法,運行速度比gzip要慢,但是可以提供更高的壓縮比。標準庫的compress/bzip2包目前還沒有提供bzip2壓縮算法的實現。完全從頭開始實現是一個壓縮算法是一件繁瑣的工作,而且 http://bzip.org 已經有現成的libbzip2的開源實現,不僅文檔齊全而且性能又好。

如果是比較小的C語言庫,我們完全可以用純Go語言重新實現一遍。如果我們對性能也沒有特殊要求的話,我們還可以用os/exec包的方法將C編寫的應用程序作爲一個子進程運行。隻有當你需要使用複雜而且性能更高的底層C接口時,就是使用cgo的場景了(譯註:用os/exec包調用子進程的方法會導致程序運行時依賴那個應用程序)。下面我們將通過一個例子講述cgo的具體用法。

-

譯註:本章采用的代碼都是最新的。因爲之前已經齣版的書中包含的代碼隻能在Go1.5之前使用。從Go1.6開始,Go語言已經明確規定了哪些Go語言指針可以之間傳入C語言函數。新代碼重點是增加了bz2alloc和bz2free的兩個函數,用於bz_stream對象空間的申請和釋放操作。下面是新代碼中增加的註釋,説明這個問題:

+

譯註:本章采用的代碼都是最新的。因爲之前已經出版的書中包含的代碼隻能在Go1.5之前使用。從Go1.6開始,Go語言已經明確規定了哪些Go語言指針可以之間傳入C語言函數。新代碼重點是增加了bz2alloc和bz2free的兩個函數,用於bz_stream對象空間的申請和釋放操作。下面是新代碼中增加的註釋,説明這個問題:

// The version of this program that appeared in the first and second
 // printings did not comply with the proposed rules for passing
 // pointers between Go and C, described here:
@@ -2047,7 +2051,7 @@
 // it returns, it clears the fields of the bz_stream that contain
 // pointers to Go variables.
 
-

要使用libbzip2,我們需要先構建一個bz_stream結構體,用於保持輸入和輸齣緩存。然後有三個函數:BZ2_bzCompressInit用於初始化緩存,BZ2_bzCompress用於將輸入緩存的數據壓縮到輸齣緩存,BZ2_bzCompressEnd用於釋放不需要的緩存。(目前不要擔心包的具體結構, 這個例子的目的就是演示各個部分如何組合在一起的。)

+

要使用libbzip2,我們需要先構建一個bz_stream結構體,用於保持輸入和輸出緩存。然後有三個函數:BZ2_bzCompressInit用於初始化緩存,BZ2_bzCompress用於將輸入緩存的數據壓縮到輸出緩存,BZ2_bzCompressEnd用於釋放不需要的緩存。(目前不要擔心包的具體結構, 這個例子的目的就是演示各個部分如何組合在一起的。)

我們可以在Go代碼中直接調用BZ2_bzCompressInit和BZ2_bzCompressEnd,但是對於BZ2_bzCompress,我們將定義一個C語言的包裝函數,用它完成眞正的工作。下面是C代碼,對應一個獨立的文件。

gopl.io/ch13/bzip
 
@@ -2107,7 +2111,7 @@ void bz2free(bz_stream* s) { free(s); }
 

在預處理過程中,cgo工具爲生成一個臨時包用於包含所有在Go語言中訪問的C語言的函數或類型。例如C.bz_stream和C.BZ2_bzCompressInit。cgo工具通過以某種特殊的方式調用本地的C編譯器來發現在Go源文件導入聲明前的註釋中包含的C頭文件中的內容(譯註:import "C"語句前僅捱着的註釋是對應cgo的特殊語法,對應必要的構建參數選項和C語言代碼)。

在cgo註釋中還可以包含#cgo指令,用於給C語言工具鏈指定特殊的參數。例如CFLAGS和LDFLAGS分别對應傳給C語言編譯器的編譯參數和鏈接器參數,使它們可以特定目録找到bzlib.h頭文件和libbz2.a庫文件。這個例子假設你已經在/usr目録成功安裝了bzip2庫。如果bzip2庫是安裝在不同的位置,你需要更新這些參數。

-

NewWriter函數通過調用C語言的BZ2_bzCompressInit函數來初始化stream中的緩存。在writer結構中還包括了另一個buffer,用於輸齣緩存。

+

NewWriter函數通過調用C語言的BZ2_bzCompressInit函數來初始化stream中的緩存。在writer結構中還包括了另一個buffer,用於輸出緩存。

下面是Write方法的實現,返迴成功壓縮數據的大小,主體是一個循環中調用C語言的bz2compress函數實現的。從代碼可以看到,Go程序可以訪問C語言的bz_stream、char和uint類型,還可以訪問bz2compress等函數,甚至可以訪問C語言中像BZ_RUN那樣的宏定義,全部都是以C.x語法訪問。其中C.uint類型和Go語言的uint類型併不相同,卽使它們具有相同的大小也是不同的類型。

func (w *writer) Write(data []byte) (int, error) {
     if w.stream == nil {
@@ -2129,8 +2133,8 @@ void bz2free(bz_stream* s) { free(s); }
     return total, nil
 }
 
-

在循環的每次迭代中,向bz2compress傳入數據的地址和剩餘部分的長度,還有輸齣緩存w.outbuf的地址和容量。這兩個長度信息通過它們的地址傳入而不是值傳入,因爲bz2compress函數可能會根據已經壓縮的數據和壓縮後數據的大小來更新這兩個值。每個塊壓縮後的數據被寫入到底層的io.Writer。

-

Close方法和Write方法有着類似的結構,通過一個循環將剩餘的壓縮數據刷新到輸齣緩存。

+

在循環的每次迭代中,向bz2compress傳入數據的地址和剩餘部分的長度,還有輸出緩存w.outbuf的地址和容量。這兩個長度信息通過它們的地址傳入而不是值傳入,因爲bz2compress函數可能會根據已經壓縮的數據和壓縮後數據的大小來更新這兩個值。每個塊壓縮後的數據被寫入到底層的io.Writer。

+

Close方法和Write方法有着類似的結構,通過一個循環將剩餘的壓縮數據刷新到輸出緩存。

// Close flushes the compressed data and closes the stream.
 // It does not close the underlying io.Writer.
 func (w *writer) Close() error {
@@ -2155,7 +2159,7 @@ void bz2free(bz_stream* s) { free(s); }
     }
 }
 
-

壓縮完成後,Close方法用了defer函數確保函數退齣前調用C.BZ2_bzCompressEnd和C.bz2free釋放相關的C语言运行时資源。此刻w.stream指針將不再有效,我們將它設置爲nil以保證安全,然後在每個方法中增加了nil檢測,以防止用戶在關閉後依然錯誤使用相關方法。

+

壓縮完成後,Close方法用了defer函數確保函數退出前調用C.BZ2_bzCompressEnd和C.bz2free釋放相關的C語言運行時資源。此刻w.stream指針將不再有效,我們將它設置爲nil以保證安全,然後在每個方法中增加了nil檢測,以防止用戶在關閉後依然錯誤使用相關方法。

上面的實現中,不僅僅寫是非併發安全的,甚至併發調用Close和Write方法也可能導致程序的的崩潰。脩複這個問題是練習13.3的內容。

下面的bzipper程序,使用我們自己包實現的bzip2壓縮命令。它的行爲和許多Unix繫統的bzip2命令類似。

gopl.io/ch13/bzipper
@@ -2224,7 +2228,7 @@ $ ./bzipper < /usr/share/dict/words | bunzip2 | sha256sum
 
 
diff --git a/ch13/ch13-05.html b/ch13/ch13-05.html
index 0e79738..6aa1bed 100644
--- a/ch13/ch13-05.html
+++ b/ch13/ch13-05.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2022,7 +2026,7 @@

13.5. 幾點忠告

我們在前一章結尾的時候,我們警告要謹慎使用reflect包。那些警告同樣適用於本章的unsafe包。

高級語言使得程序員不用在關心眞正運行程序的指令細節,同時也不再需要關註許多如內存布局之類的實現細節。因爲高級語言這個絶緣的抽象層,我們可以編寫安全健壯的,併且可以運行在不同操作繫統上的具有高度可移植性的程序。

-

但是unsafe包,它讓程序員可以透過這個絶緣的抽象層直接使用一些必要的功能,雖然可能是爲了穫得更好的性能。但是代價就是犧牲了可移植性和程序安全,因此使用unsafe包是一個危險的行爲。我們對何時以及如何使用unsafe包的建議和我們在11.5節提到的Knuth對過早優化的建議類似。大多數Go程序員可能永遠不會需要直接使用unsafe包。當然,也永遠都會有一些需要使用unsafe包實現會更簡單的場景。如果確實認爲使用unsafe包是最理想的方式,那麽應該盡可能將它限製在較小的范圍,那樣其它代碼就忽略unsafe的影響。

+

但是unsafe包,它讓程序員可以透過這個絶緣的抽象層直接使用一些必要的功能,雖然可能是爲了獲得更好的性能。但是代價就是犧牲了可移植性和程序安全,因此使用unsafe包是一個危險的行爲。我們對何時以及如何使用unsafe包的建議和我們在11.5節提到的Knuth對過早優化的建議類似。大多數Go程序員可能永遠不會需要直接使用unsafe包。當然,也永遠都會有一些需要使用unsafe包實現會更簡單的場景。如果確實認爲使用unsafe包是最理想的方式,那麽應該盡可能將它限製在較小的范圍,那樣其它代碼就忽略unsafe的影響。

現在,趕緊將最後兩章拋入腦後吧。編寫一些實實在在的應用是眞理。請遠離reflect的unsafe包,除非你確實需要它們。

最後,用Go快樂地編程。我們希望你能像我們一樣喜歡Go語言。

@@ -2056,7 +2060,7 @@ diff --git a/ch13/ch13.html b/ch13/ch13.html index b4a6a0b..93cf7dd 100644 --- a/ch13/ch13.html +++ b/ch13/ch13.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,9 +2024,9 @@

第13章 底層編程

-

Go語言的設計包含了諸多安全策略,限製了可能導致程序運行齣現錯誤的用法。編譯時類型檢査檢査可以發現大多數類型不匹配的操作,例如兩個字符串做減法的錯誤。字符串、map、slice和chan等所有的內置類型,都有嚴格的類型轉換規則。

+

Go語言的設計包含了諸多安全策略,限製了可能導致程序運行出現錯誤的用法。編譯時類型檢査檢査可以發現大多數類型不匹配的操作,例如兩個字符串做減法的錯誤。字符串、map、slice和chan等所有的內置類型,都有嚴格的類型轉換規則。

對於無法靜態檢測到的錯誤,例如數組訪問越界或使用空指針,運行時動態檢測可以保證程序在遇到問題的時候立卽終止併打印相關的錯誤信息。自動內存管理(垃圾內存自動迴收)可以消除大部分野指針和內存洩漏相關的問題。

-

Go語言的實現刻意隱藏了很多底層細節。我們無法知道一個結構體眞實的內存布局,也無法穫取一個運行時函數對應的機器碼,也無法知道當前的goroutine是運行在哪個操作繫統線程之上。事實上,Go語言的調度器會自己決定是否需要將某個goroutine從一個操作繫統線程轉移到另一個操作繫統線程。一個指向變量的指針也併沒有展示變量眞實的地址。因爲垃圾迴收器可能會根據需要移動變量的內存位置,當然變量對應的地址也會被自動更新。

+

Go語言的實現刻意隱藏了很多底層細節。我們無法知道一個結構體眞實的內存布局,也無法獲取一個運行時函數對應的機器碼,也無法知道當前的goroutine是運行在哪個操作繫統線程之上。事實上,Go語言的調度器會自己決定是否需要將某個goroutine從一個操作繫統線程轉移到另一個操作繫統線程。一個指向變量的指針也併沒有展示變量眞實的地址。因爲垃圾迴收器可能會根據需要移動變量的內存位置,當然變量對應的地址也會被自動更新。

總的來説,Go語言的這些特性使得Go程序相比較低級的C語言來説更容易預測和理解,程序也不容易崩潰。通過隱藏底層的實現細節,也使得Go語言編寫的程序具有高度的可移植性,因爲語言的語義在很大程度上是獨立於任何編譯器實現、操作繫統和CPU繫統結構的(當然也不是完全絶對獨立:例如int等類型就依賴於CPU機器字的大小,某些表達式求值的具體順序,還有編譯器實現的一些額外的限製等)。

有時候我們可能會放棄使用部分語言特性而優先選擇更好具有更好性能的方法,例如需要與其他語言編寫的庫互操作,或者用純Go語言無法實現的某些函數。

在本章,我們將展示如何使用unsafe包來襬脫Go語言規則帶來的限製,講述如何創建C語言函數庫的綁定,以及如何進行繫統調用。

@@ -2060,7 +2064,7 @@ diff --git a/ch2/ch2-01.html b/ch2/ch2-01.html index 9a980a9..a97f519 100644 --- a/ch2/ch2-01.html +++ b/ch2/ch2-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,28 +2024,28 @@

2.1. 命名

-

Go語言中的的函數名, 變量名, 常量名, 類型名, 語句段標籤名, 和 包名 等所有的命名, 都遵循一個命名規則: 一個名字必鬚以一個字母(Unicode字母)或下劃線開頭, 後面可以跟任意數量的字母,數字或下劃線. 不同大小寫字母是不同的: heapSortHeapsort 是兩個不同的名字.

-

Go語言類似 ifswitch 的關鍵字有25個; 關鍵字不能用於自定義名字, 隻能在特定語法中使用.

+

Go語言中的函數名、變量名、常量名、類型名、語句標號和包名等所有的命名,都遵循一個簡單的命名規則:一個名字必鬚以一個字母(Unicode字母)或下劃線開頭,後面可以跟任意數量的字母、數字或下劃線。大寫字母和小寫字母是不同的:heapSort和Heapsort是兩個不同的名字。

+

Go語言中類似if和switch的關鍵字有25個;關鍵字不能用於自定義名字,隻能在特定語法結構中使用。

break      default       func     interface   select
 case       defer         go       map         struct
 chan       else          goto     package     switch
 const      fallthrough   if       range       type
 continue   for           import   return      var
-

此外, 還有大約30多個預先定義的名字, 比如 inttrue 等, 主要用於內建的常量, 類型, 和 函數.

-
Constants:  true false iota nil
+

此外,還有大約30多個預定義的名字,比如int和true等,主要對應內建的常量、類型和函數。

+
內建常量: true false iota nil
 
-Types:      int int8 int16 int32 int64
-            uint uint8 uint16 uint32 uint64 uintptr
-            float32 float64 complex128 complex64
-            bool byte rune string error
+內建類型: int int8 int16 int32 int64
+          uint uint8 uint16 uint32 uint64 uintptr
+          float32 float64 complex128 complex64
+          bool byte rune string error
 
-Functions:  make len cap new append copy close delete
-            complex real imag
-            panic recover
-

這些內部預先定義的名字不是關鍵字, 你可以在定義中重現使用它們. 在一些特殊的場景重新定義是有意義的, 但是也要註意避免引起混亂.

-

如果一個實體是在函數內部定義, 那麽它的就隻在函數內部有效. 如果是在函數外部定義, 那麽將在當前包的所有文件中都可以訪問. 名字的開頭字母的大小寫決定了名字在包外的可見性. 如果一個名字是大寫字母開頭的, 那麽它將是導齣的, 也就是可以被外部的包訪問, 例如 fmt 包的 Printf 函數就是導齣的, 可以在 fmt 包外部訪問. 包本身的名字一般總是用小寫字母.

-

名字的長度沒有限製, 但是Go的風格是盡量使用短小的名字, 對於局部變量尤其是這樣; 你會經常看到 i 之類的名字, 而是冗長的 theLoopIndex. 通常來説, 如果一個名字的作用域比較大, 生命週期較長, 那麽用長的名字將更有意義.

-

在習慣上, Go程序員推薦使用駝峯式命名, 當名字有幾個單詞的時優先使用大小寫分隔, 而不是優先用下劃線分隔. 因此, 標準庫有 QuoteRuneToASCIIparseRequestLine 這樣的函數命名, 但是不會用 quote_rune_to_ASCIIparse_request_line 這樣的命名. 像 ASCIIHTML 這樣的縮略詞避免使用大小寫混合, 它們可能被稱爲 htmlEscape, HTMLEscapeescapeHTML, 但不會是 escapeHtml.

+內建函數: make len cap new append copy close delete + complex real imag + panic recover +

這些內部預先定義的名字併不是關鍵字,你可以再定義中重新使用它們。在一些特殊的場景中重新定義它們也是有意義的,但是也要註意避免過度而引起語義混亂。

+

如果一個名字是在函數內部定義,那麽它的就隻在函數內部有效。如果是在函數外部定義,那麽將在當前包的所有文件中都可以訪問。名字的開頭字母的大小寫決定了名字在包外的可見性。如果一個名字是大寫字母開頭的(譯註:必鬚是在函數外部定義的包級名字;包級函數名本身也是包級名字),那麽它將是導出的,也就是説可以被外部的包訪問,例如fmt包的Printf函數就是導出的,可以在fmt包外部訪問。包本身的名字一般總是用小寫字母。

+

名字的長度沒有邏輯限製,但是Go語言的風格是盡量使用短小的名字,對於局部變量尤其是這樣;你會經常看到i之類的短名字,而不是冗長的theLoopIndex命名。通常來説,如果一個名字的作用域比較大,生命週期也比較長,那麽用長的名字將會更有意義。

+

在習慣上,Go語言程序員推薦使用 駝峯式 命名,當名字有幾個單詞組成的時優先使用大小寫分隔,而不是優先用下劃線分隔。因此,在標準庫有QuoteRuneToASCII和parseRequestLine這樣的函數命名,但是一般不會用quote_rune_to_ASCII和parse_request_line這樣的命名。而像ASCII和HTML這樣的縮略詞則避免使用大小寫混合的寫法,它們可能被稱爲htmlEscape、HTMLEscape或escapeHTML,但不會是escapeHtml。

@@ -2073,7 +2077,7 @@ Functions: make len cap new append copy close delete diff --git a/ch2/ch2-02.html b/ch2/ch2-02.html index a734a75..f2d51a9 100644 --- a/ch2/ch2-02.html +++ b/ch2/ch2-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,9 +2024,8 @@

2.2. 聲明

-

聲明定義了程序的入口以及部分或全部的屬性. Go主要有四種聲明類型: var, const, type, 和 func, 分别對應 變量, 常量, 類型, 和 函數的 聲明. 這一章我們重點討論變量和類型的聲明, 第三章將討論常量的聲明, 第五章將討論函數的聲明.

-

一個Go程序存儲在一個或多個以.go爲後綴名的文件中. 每個文件以個包的聲明開始, 以説明文件是屬於包的一部分. -包聲明之後是 import 導入聲明, 然後是包一級的類型/變量/常量/函數的聲明, 聲明的順序無關緊要. 例如, 下面的例子聲明了一個常量, 一個函數和兩個變量:

+

聲明語句定義了程序的各種實體對象以及部分或全部的屬性。Go語言主要有四種類型的聲明語句:var、const、type和func,分别對應變量、常量、類型和函數實體對象的聲明。這一章我們重點討論變量和類型的聲明,第三章將討論常量的聲明,第五章將討論函數的聲明。

+

一個Go語言編寫的程序對應一個或多個以.go爲文件後綴名的源文件中。每個源文件以包的聲明語句開始,説明該源文件是屬於哪個包。包聲明語句之後是import語句導入依賴的其它包,然後是包一級的類型、變量、常量、函數的聲明語句,包一級的各種類型的聲明語句的順序無關緊要(譯註:函數內部的名字則必鬚先聲明之後才能使用)。例如,下面的例子中聲明了一個常量、一個函數和兩個變量:

gopl.io/ch2/boiling
 // Boiling prints the boiling point of water.
 package main
@@ -2039,9 +2042,9 @@
     // boiling point = 212°F or 100°C
 }
 
-

其中 常量 boilingF 是在包一級聲明的, 然後 fc 是在 main 函數內部聲明的. 在包一級聲明的名字可在整個包訪問, 而不僅僅在其聲明的文件中訪問. 相比之下, 局部聲明的名字就隻能在函數內部很小的部分可訪問.

-

一個函數的聲明有一個函數名字, 參數列表(由函數的調用者提供參數變量的具體值), 一個可選的返迴值列表, 和包含函數語句定義的函數體. 如果函數沒有返迴值, 那麽返迴值列表是省略的. 執行函數從函數的第一個語句開始, 但是順序執行直到遇到 renturn 返迴語言, 如果沒有返迴語句則是到函數末尾, 然後返迴到調用者.

-

我們已經看到過很多函數的例子了, 在第五章將深入討論函數的細節, 這里隻粗略説下. 下面的 fToC 函數封裝了溫度轉換的邏輯, 這樣它隻需要定義一次, 就可以在多個地方多次使用. 這個例子中, main 函數就調用了兩次 fToC 函數, 分别是使用局部定義的兩個常量作爲函數參數.

+

其中常量boilingF是在包一級范圍聲明語句聲明的,然後f和c兩個變量是在main函數內部聲明的聲明語句聲明的。在包一級聲明語句聲明的名字可在整個包對應的每個源文件中訪問,而不是僅僅在其聲明語句所在的源文件中訪問。相比之下,局部聲明的名字就隻能在函數內部很小的范圍被訪問。

+

一個函數的聲明由一個函數名字、參數列表(由函數的調用者提供參數變量的具體值)、一個可選的返迴值列表和包含函數定義的函數體組成。如果函數沒有返迴值,那麽返迴值列表是省略的。執行函數從函數的第一個語句開始,依次順序執行直到遇到renturn返迴語句,如果沒有返迴語句則是執行到函數末尾,然後返迴到函數調用者。

+

我們已經看到過很多函數聲明和函數調用的例子了,在第五章將深入討論函數的相關細節,這里隻簡單解釋下。下面的fToC函數封裝了溫度轉換的處理邏輯,這樣它隻需要被定義一次,就可以在多個地方多次被使用。在這個例子中,main函數就調用了兩次fToC函數,分别是使用在局部定義的兩個常量作爲調用函數的參數。

gopl.io/ch2/ftoc
 // Ftoc prints two Fahrenheit-to-Celsius conversions.
 package main
@@ -2089,7 +2092,7 @@
 
 
diff --git a/ch2/ch2-03.html b/ch2/ch2-03.html
index 337e33e..2910739 100644
--- a/ch2/ch2-03.html
+++ b/ch2/ch2-03.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,45 +2024,44 @@

2.3. 變量

-

var 聲明可以創建一個特定類型的變量, 然後給變量附加一個名字, 併且設置變量的初始值. 變量聲明的一般語法:

-
var name type = 表達式
+

var聲明語句可以創建一個特定類型的變量,然後給變量附加一個名字,併且設置變量的初始值。變量聲明的一般語法如下:

+
var 變量名字 類型 = 表達式
 
-

其中類型或 = 表達式 可以省略其中的一個. 如果省略的是類型信息, 那麽將根據初始化表達式類推導類型信息. 如果初始化表達式被省略, 那麽將用零值初始化變量. 數值類型變量的零值是0, 布爾類型變量的零值是 false, 字符串的零值是空字符串, 接口或引用類型(包括 切片, 字典, 通道 和 函數)的變量的零值是 nil. 數組或結構體等聚合類型的零值是每個元素或字段都是零值.

-

零值機製可以確保每個聲明的變量總是有一個良好定義的值, 在 Go 中不存在未初始化的變量. 這個可以簡化很多代碼, 在沒有增加額外工作的前提下確保邊界條件下的合理行爲. 例如:

+

其中“類型”或“= 表達式”兩個部分可以省略其中的一個。如果省略的是類型信息,那麽將根據初始化表達式來推導變量的類型信息。如果初始化表達式被省略,那麽將用零值初始化該變量。 數值類型變量對應的零值是0,布爾類型變量對應的零值是false,字符串類型對應的零值是空字符串,接口或引用類型(包括slice、map、chan和函數)變量對應的零值是nil。數組或結構體等聚合類型對應的零值是每個元素或字段都是對應該類型的零值。

+

零值初始化機製可以確保每個聲明的變量總是有一個良好定義的值,因此在Go語言中不存在未初始化的變量。這個特性可以簡化很多代碼,而且可以在沒有增加額外工作的前提下確保邊界條件下的合理行爲。例如:

var s string
 fmt.Println(s) // ""
 
-

這段代碼將打印一個空字符串, 而不是導致錯誤或産生不可預知的行爲. Go 程序員經常讓一些聚合類型的零值也有意義, 這樣不管任何類型的變量總是有一個合理的零值狀態.

-

可以在一個聲明語句中同時聲明一組變量, 或用一組初始化表達式聲明併初始化一組變量. -如果省略每個變量的類型, 將可以聲明多個不同類型的變量(類型由初始化表達式推導):

-
var i, j, k int // int, int, int
+

這段代碼將打印一個空字符串,而不是導致錯誤或産生不可預知的行爲。Go語言程序員應該讓一些聚合類型的零值也具有意義,這樣可以保證不管任何類型的變量總是有一個合理有效的零值狀態。

+

也可以在一個聲明語句中同時聲明一組變量,或用一組初始化表達式聲明併初始化一組變量。如果省略每個變量的類型,將可以聲明多個類型不同的變量(類型由初始化表達式推導):

+
var i, j, k int                 // int, int, int
 var b, f, s = true, 2.3, "four" // bool, float64, string
 
-

初始化可以是字面量或任意的表達式. 包級别聲明的變量會在 main 函數執行前完成初始化 (§2.6.2), 局部變量將在聲明語句被執行到的時候初始化.

-

一組變量的初始化也可以通過調用一個函數, 由函數返迴的多個返迴值初始化:

+

初始化表達式可以是字面量或任意的表達式。在包級别聲明的變量會在main入口函數執行前完成初始化(§2.6.2),局部變量將在聲明語句被執行到的時候完成初始化。

+

一組變量也可以通過調用一個函數,由函數返迴的多個返迴值初始化:

var f, err = os.Open(name) // os.Open returns a file and an error
 

2.3.1. 簡短變量聲明

-

在函數內部, 有一種稱爲簡短變量聲明的形式可用於聲明和初始化局部變量. 以 名字 := 表達式 方式聲明變量, 變量的類型根據表達式來推導. 這里函數中是三個簡短變量聲明語句(§1.4):

+

在函數內部,有一種稱爲簡短變量聲明語句的形式可用於聲明和初始化局部變量。它以“名字 := 表達式”形式聲明變量,變量的類型根據表達式來自動推導。下面是lissajous函數中的三個簡短變量聲明語句(§1.4):

anim := gif.GIF{LoopCount: nframes}
 freq := rand.Float64() * 3.0
 t := 0.0
 
-

因爲簡潔和靈活性, 簡短變量聲明用於大部分的局部變量的聲明和初始化. var 方式的聲明往往是用於需要顯示指定類型的局部變量, 或者因爲稍後會被賦值而初始值無關緊要的變量.

-
i := 100  // an int
+

因爲簡潔和靈活的特點,簡短變量聲明被廣泛用於大部分的局部變量的聲明和初始化。var形式的聲明語句往往是用於需要顯式指定變量類型地方,或者因爲變量稍後會被重新賦值而初始值無關緊要的地方。

+
i := 100                  // an int
 var boiling float64 = 100 // a float64
 var names []string
 var err error
 var p Point
 
-

於 var 聲明變量一樣, 簡短變量聲明也可以用來聲明和初始化一組變量:

+

和var形式聲明變語句一樣,簡短變量聲明語句也可以用來聲明和初始化一組變量:

i, j := 0, 1
 
-

但是這種聲明多個變量的方式隻簡易在可以提高代碼可讀性的地方使用, 比如 for 循環的初始化部分.

-

請記住 := 是一個變量聲明, 而 = 是一個賦值操作. 不要混淆多個變量的聲明和元組的多重(§2.4.1), 後者是將右邊的表達式值賦給左邊對應位置的變量:

+

但是這種同時聲明多個變量的方式應該限製隻在可以提高代碼可讀性的地方使用,比如for語句的循環的初始化語句部分。

+

請記住“:=”是一個變量聲明語句,而“=‘是一個變量賦值操作。也不要混淆多個變量的聲明和元組的多重賦值(§2.4.1),後者是將右邊各個的表達式值賦值給左邊對應位置的各個變量:

i, j = j, i // 交換 i 和 j 的值
 
-

和普通 var 變量聲明一樣, 簡短變量聲明也可以用調用函數的返迴值來聲明, 像 os.Open 函數返迴兩個值:

+

和普通var形式的變量聲明語句一樣,簡短變量聲明語句也可以用函數的返迴值來聲明和初始化變量,像下面的os.Open函數調用將返迴兩個值:

f, err := os.Open(name)
 if err != nil {
     return err
@@ -2066,36 +2069,36 @@ t := 0.0
 // ...use f...
 f.Close()
 
-

這里有一個比較微妙的地方: 簡短變量聲明左邊的全部變量可能併不是全部都是剛剛聲明的. 如果有一些已經在相同的詞法塊聲明過了(§2.7), 那麽簡短變量聲明對這些已經聲明過的變量就隻有賦值行爲了.

-

在下面的代碼中, 第一個語句聲明了 in 和 err 變量. 第二個語句隻聲明了 out, 然後對已經聲明的 err 進行賦值.

+

這里有一個比較微妙的地方:簡短變量聲明左邊的變量可能併不是全部都是剛剛聲明的。如果有一些已經在相同的詞法域聲明過了(§2.7),那麽簡短變量聲明語句對這些已經聲明過的變量就隻有賦值行爲了。

+

在下面的代碼中,第一個語句聲明了in和err兩個變量。在第二個語句隻聲明了out一個變量,然後對已經聲明的err進行了賦值操作。

in, err := os.Open(infile)
 // ...
 out, err := os.Create(outfile)
 
-

簡短變量聲明必鬚至少聲明一個新的變量, 否則編譯將不能通過:

+

簡短變量聲明語句中必鬚至少要聲明一個新的變量,下面的代碼將不能編譯通過:

f, err := os.Open(infile)
 // ...
 f, err := os.Create(outfile) // compile error: no new variables
 
-

解決的方法是第二個語句改用普通的賦值語言.

-

簡短變量聲明隻有對在變量已經在同級詞法域聲明過的變量纔和賦值操作等同, 如果變量是在外部詞法域聲明了, 那麽將會聲明一個新變量. 我們在本章後面將會看到類似的例子.

-

2.3.2 指針

-

一個變量對應一個保存了一個值的內存空間. 變量在聲明語句創建時綁定一個名字, 比如 x, 但是還有很多變量始終以表達式方式引入, 例如 x[i] 或 x.f. 所有這些表達式都讀取一個變量的值, 除非它們是齣現在賦值語句的左邊, 這種時候是給變量賦予一個新值.

-

一個指針的值是一個變量的地址. 一個指針對應變量在內存中的存儲位置. 併不是每一個值都會有一個地址, 但是對於每一個變量必然有對應的地址. 通過指針, 我們可以直接讀或更新變量的值, 而不需要知道變量的名字(卽使變量有名字的話).

-

如果這樣聲明一個變量 var x int, 那麽 &x 表達式(x的地址)將産生一個指向整數變量的指針, 對應的數據類型是 *int, 稱之爲 "指向 int 的指針". 如果指針名字爲 p, 那麽可以説 "p 指針指向 x", 或者説 "p 指針保存了 x 變量的地址". *p 對應 p 指針指向的變量的值. *p 表達式讀取變量的值, 爲 int 類型, 同時因爲 *p 對應一個變量, 所以可以齣現在賦值語句的左邊, 用於更新所指向的變量的值.

+

解決的方法是第二個簡短變量聲明語句改用普通的多重賦值語言。

+

簡短變量聲明語句隻有對已經在同級詞法域聲明過的變量才和賦值操作語句等價,如果變量是在外部詞法域聲明的,那麽簡短變量聲明語句將會在當前詞法域重新聲明一個新的變量。我們在本章後面將會看到類似的例子。

+

2.3.2. 指針

+

一個變量對應一個保存了變量對應類型值的內存空間。普通變量在聲明語句創建時被綁定到一個變量名,比如叫x的變量,但是還有很多變量始終以表達式方式引入,例如x[i]或x.f變量。所有這些表達式一般都是讀取一個變量的值,除非它們是出現在賦值語句的左邊,這種時候是給對應變量賦予一個新的值。

+

一個指針的值是另一個變量的地址。一個指針對應變量在內存中的存儲位置。併不是每一個值都會有一個內存地址,但是對於每一個變量必然有對應的內存地址。通過指針,我們可以直接讀或更新對應變量的值,而不需要知道該變量的名字(如果變量有名字的話)。

+

如果用“var x int”聲明語句聲明一個x變量,那麽&x表達式(取x變量的內存地址)將産生一個指向該整數變量的指針,指針對應的數據類型是*int,指針被稱之爲“指向int類型的指針”。如果指針名字爲p,那麽可以説“p指針指向變量x”,或者説“p指針保存了x變量的內存地址”。同時*p表達式對應p指針指向的變量的值。一般*p表達式讀取指針指向的變量的值,這里爲int類型的值,同時因爲*p對應一個變量,所以該表達式也可以出現在賦值語句的左邊,表示更新指針所指向的變量的值。

x := 1
 p := &x         // p, of type *int, points to x
 fmt.Println(*p) // "1"
 *p = 2          // equivalent to x = 2
 fmt.Println(x)  // "2"
 
-

對於聚合類型, 比如結構體的每個字段, 或者是數組的每個元素, 也都是對應一個變量, 併且可以被穫取地址.

-

變量有時候被稱爲可尋址的值. 如果變量由表達式臨時生成, 那麽表達式必鬚能接受 & 取地址操作.

-

任何類型的指針的零值都是 nil. 如果 p != nil 測試爲眞, 那麽 p 是指向變量. 指針直接也是可以進行相等測試的, 隻有當它們指向同一個變量或全部是 nil 時纔相等.

+

對於聚合類型每個成員——比如結構體的每個字段、或者是數組的每個元素——也都是對應一個變量,因此可以被取地址。

+

變量有時候被稱爲可尋址的值。卽使變量由表達式臨時生成,那麽表達式也必鬚能接受&取地址操作。

+

任何類型的指針的零值都是nil。如果p != nil測試爲眞,那麽p是指向某個有效變量。指針之間也是可以進行相等測試的,隻有當它們指向同一個變量或全部是nil時才相等。

var x, y int
 fmt.Println(&x == &x, &x == &y, &x == nil) // "true false false"
 
-

在Go語言中, 返迴函數中局部變量的地址是安全的. 例如下面的代碼, 調用 f 函數時創建 v 局部變量, 在地址被返迴之後依然有效, 因爲指針 p 依然引用這個變量.

+

在Go語言中,返迴函數中局部變量的地址也是安全的。例如下面的代碼,調用f函數時創建局部變量v,在局部變量地址被返迴之後依然有效,因爲指針p依然引用這個變量。

var p = f()
 
 func f() *int {
@@ -2103,12 +2106,12 @@ fmt.Println(&x == &x, &x == &y, &x == return &v
 }
 
-

每次調用 f 函數都將返迴不同的結果:

+

每次調用f函數都將返迴不同的結果:

fmt.Println(f() == f()) // "false"
 
-

因爲指針包含了一個變量的地址, 因此將指針作爲參數調用函數, 將可以在函數中通過指針更新變量的值. 例如這個通過指針來更新變量的值, 然後返迴更新後的值, 可用在一個表達式中:

+

因爲指針包含了一個變量的地址,因此如果將指針作爲參數調用函數,那將可以在函數中通過該指針來更新變量的值。例如下面這個例子就是通過指針來更新變量的值,然後返迴更新後的值,可用在一個表達式中(譯註:這是對C語言中++v操作的模擬,這里隻是爲了説明指針的用法,incr函數模擬的做法併不推薦):

func incr(p *int) int {
-    *p++ // increments what p points to; does not change p
+    *p++ // 非常重要:隻是增加p指向的變量的值,併不改變p指針!!!
     return *p
 }
 
@@ -2116,8 +2119,8 @@ v := 1
 incr(&v)              // side effect: v is now 2
 fmt.Println(incr(&v)) // "3" (and v is 3)
 
-

每次我們對變量取地址, 或者複製指針, 我們都創建了變量的新的别名. 例如, *p 是 變量 v 的别名. 指針特别有加載的地方在於我們可以不用名字而訪問一個變量, 但是這是一把雙刃劍: 要找到一個變量的所有訪問者, 我們必鬚知道變量全部的别名. 不僅僅是指針創建别名, 很多其他引用類型也會創建别名, 例如 切片, 字典和管道, 甚至結構體, 數組和接口都會創建所引用變量的别名.

-

指針是 flag 包的關鍵, 它使用命令行參數來設置對應的變量, 而這些分布在整個程序中. 爲了説明這一點, 在早些的echo版本中, 包含了兩個可選的命令行參數: -n 用於忽略行尾的換行符, -s sep 用於指定分隔字符(默認是空格). 這是第四個版本, 對應包 gopl.io/ch2/echo4.

+

每次我們對一個變量取地址,或者複製指針,我們都是爲原變量創建了新的别名。例如,*p就是是 變量v的别名。指針特别有價值的地方在於我們可以不用名字而訪問一個變量,但是這是一把雙刃劍:要找到一個變量的所有訪問者併不容易,我們必鬚知道變量全部的别名(譯註:這是Go語言的垃圾迴收器所做的工作)。不僅僅是指針會創建别名,很多其他引用類型也會創建别名,例如slice、map和chan,甚至結構體、數組和接口都會創建所引用變量的别名。

+

指針是實現標準庫中flag包的關鍵技術,它使用命令行參數來設置對應變量的值,而這些對應命令行標誌參數的變量可能會零散分布在整個程序中。爲了説明這一點,在早些的echo版本中,就包含了兩個可選的命令行參數:-n用於忽略行尾的換行符,-s sep用於指定分隔字符(默認是空格)。下面這是第四個版本,對應包路徑爲gopl.io/ch2/echo4。

gopl.io/ch2/echo4
 // Echo4 prints its command-line arguments.
 package main
@@ -2139,9 +2142,9 @@ fmt.Println(incr(&v)) // "3" (and v is
     }
 }
 
-

flag.Bool 函數調用創建了一個新的布爾型標誌參數變量. 它有三個屬性: 第一個是的名字"n", 然後是標誌的默認值(這里是false), 最後是對應的描述信息. 如果用戶輸入了無效的標誌參數, 或者輸入 -h-help 標誌參數, 將打印標誌參數的名字, 默認值和描述信息. 類似的, flag.String 用於創建一個字符串類型的標誌參數變量, 同樣包含參數名, 默認值, 和描述信息. 變量 sepn 是一個指向標誌參數變量的指針, 因此必鬚用 sep 和 n 的方式間接引用.

-

當程序運行時, 必鬚在標誌參數變量使用之前調用 flag.Parse 函數更新標誌參數變量的值(之前是默認值). 非標誌參數的普通類型參數可以用 flag.Args() 訪問, 對應一個 字符串切片. 如果 flag.Parse 解析遇到錯誤, 將打印提示信息, 然後調用 os.Exit(2) 終止程序.

-

讓我們運行一些 echo 測試用例:

+

調用flag.Bool函數會創建一個新的對應布爾型標誌參數的變量。它有三個屬性:第一個是的命令行標誌參數的名字“n”,然後是該標誌參數的默認值(這里是false),最後是該標誌參數對應的描述信息。如果用戶在命令行輸入了一個無效的標誌參數,或者輸入-h-help參數,那麽將打印所有標誌參數的名字、默認值和描述信息。類似的,調用flag.String函數將於創建一個對應字符串類型的標誌參數變量,同樣包含命令行標誌參數對應的參數名、默認值、和描述信息。程序中的sepn變量分别是指向對應命令行標誌參數變量的指針,因此必鬚用*sep*n形式的指針語法間接引用它們。

+

當程序運行時,必鬚在使用標誌參數對應的變量之前調用先flag.Parse函數,用於更新每個標誌參數對應變量的值(之前是默認值)。對於非標誌參數的普通命令行參數可以通過調用flag.Args()函數來訪問,返迴值對應對應一個字符串類型的slice。如果在flag.Parse函數解析命令行參數時遇到錯誤,默認將打印相關的提示信息,然後調用os.Exit(2)終止程序。

+

讓我們運行一些echo測試用例:

$ go build gopl.io/ch2/echo4
 $ ./echo4 a bc def
 a bc def
@@ -2154,56 +2157,65 @@ Usage of ./echo4:
   -n    omit trailing newline
   -s string
         separator (default " ")
-

2.3.3 new 函數

-

另一個創建變量的方法是用內建的 new 函數. 表達式 new(T) 創建一個T類型的匿名變量, 初始化爲T類型的零值, 返迴返迴變量地址, 返迴指針類型爲 *T.

+

2.3.3. new函數

+

另一個創建變量的方法是調用用內建的new函數。表達式new(T)將創建一個T類型的匿名變量,初始化爲T類型的零值,然後返迴變量地址,返迴的指針類型爲*T

p := new(int)   // p, *int 類型, 指向匿名的 int 變量
 fmt.Println(*p) // "0"
 *p = 2          // 設置 int 匿名變量的值爲 2
 fmt.Println(*p) // "2"
 
-

從 new 創建變量和普通聲明方式創建變量沒有什麽區别, 除了不需要聲明一個臨時變量的名字外, 我們還可以在表達式中使用 new(T). 換言之, new 類似是一種語法醣, 而不是一個新的基礎概念.

-

下面的兩個 newInt 函數有着相同的行爲:

+

用new創建變量和普通變量聲明語句方式創建變量沒有什麽區别,除了不需要聲明一個臨時變量的名字外,我們還可以在表達式中使用new(T)。換言之,new函數類似是一種語法醣,而不是一個新的基礎概念。

+

下面的兩個newInt函數有着相同的行爲:

func newInt() *int {                func newInt() *int {
     return new(int)                     var dummy int
 }                                       return &dummy
                                     }
 
-

每次調用 new 都是返迴一個新的變量的地址, 因此下面兩個地址是不同的:

+

每次調用new函數都是返迴一個新的變量的地址,因此下面兩個地址是不同的:

p := new(int)
 q := new(int)
 fmt.Println(p == q) // "false"
 
-

當然也有特殊情況: 如果兩個類型都是空的, 也就是説類型的大小是0, 例如 struct{}[0]int, 有可能有相同的地址(依賴具體的語言實現).

-

new 函數使用相對比較少, 因爲對應結構體來説, 可以直接用字面量語法創建新變量的方法更靈活 (§4.4.1).

-

由於 new 隻是一個預定義的函數, 它併不是一個關鍵字, 因此我們可以將 new 重新定義爲别的類型. 例如:

+

當然也可能有特殊情況:如果兩個類型都是空的,也就是説類型的大小是0,例如struct{}[0]int, 有可能有相同的地址(依賴具體的語言實現)(譯註:請謹慎使用大小爲0的類型,因爲如果類型的大小位0好話,可能導致Go語言的自動垃圾迴收器有不同的行爲,具體請査看runtime.SetFinalizer函數相關文檔)。

+

new函數使用常見相對比較少,因爲對應結構體來説,可以直接用字面量語法創建新變量的方法會更靈活(§4.4.1)。

+

由於new隻是一個預定義的函數,它併不是一個關鍵字,因此我們可以將new名字重新定義爲别的類型。例如下面的例子:

func delta(old, new int) int { return new - old }
 
-

因爲 new 被定義爲 int 類型的變量, 因此 delta 函數內部就無法在使用內置的 new 函數了.

+

由於new被定義爲int類型的變量名,因此在delta函數內部是無法使用內置的new函數的。

2.3.4. 變量的生命週期

-

變量的生命週期指的是程序運行期間變量存在的有效時間間隔. 包級聲明的變量的生命週期和程序的生命週期是一致的. 相比之下, 局部變量的聲明週期是動態的: 從每次創建一個新變量的聲明語句被執行開始, 直到變量不在被引用爲止, 然後變量的存儲空間可能被迴收. 函數的參數變量和返迴值變量都是局部變量. 它們在函數每次被調用的時候創建.

-

例如, 下面是從 1.4 節的 Lissajous 程序摘録的代碼片段:

-
for t := 0.0; t < cycles*2*math.Pi; t += res { 
-    x := math.Sin(t) 
-    y := math.Sin(t*freq + phase) 
-    img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), 
-        blackIndex) 
+

變量的生命週期指的是在程序運行期間變量有效存在的時間間隔。對於在包一級聲明的變量來説,它們的生命週期和整個程序的運行週期是一致的。而相比之下,在局部變量的聲明週期則是動態的:從每次創建一個新變量的聲明語句開始,直到該變量不再被引用爲止,然後變量的存儲空間可能被迴收。函數的參數變量和返迴值變量都是局部變量。它們在函數每次被調用的時候創建。

+

例如,下面是從1.4節的Lissajous程序摘録的代碼片段:

+
for t := 0.0; t < cycles*2*math.Pi; t += res {
+    x := math.Sin(t)
+    y := math.Sin(t*freq + phase)
+    img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5),
+        blackIndex)
 }
 
-

在每次循環的開始創建變量 t, 然後在每次循環迭代中創建 x 和 y.

-

那麽垃圾收集器是如何知道一個變量是何時可以被迴收的呢? 這里我們先避開完整的技術細節, 但是基本的思路是, 從每個包級的變量和每個當前運行函數的每一個局部變量開始, 通過指針或引用的路徑, 是否可以找到該變量. 如果不存在這樣的路徑, 那麽説明該變量是不可達的, 也就是説它併不會影響其餘的計算.

-

因爲一個變量的聲明週期隻取決於是否可達, 因此一個循環迭代內部的局部變量的生命週期可能超齣其局部作用域. 它可能在函數返迴之後依然存在.

-

編譯器會選擇在棧上還是在堆上分配局部變量的存儲空間, 但可能令人驚訝的是, 這個選擇併不是由 var 或 new 來決定的.

-
var global *int 
+

譯註:函數的有右小括弧也可以另起一行縮進,同時爲了防止編譯器在行尾自動插入分號而導致的編譯錯誤,可以在末尾的參數變量後面顯式插入逗號。像下面這樣:

+
for t := 0.0; t < cycles*2*math.Pi; t += res {
+    x := math.Sin(t)
+    y := math.Sin(t*freq + phase)
+    img.SetColorIndex(
+        size+int(x*size+0.5), size+int(y*size+0.5),
+        blackIndex, // 最後插入的逗號不會導致編譯錯誤,這是Go編譯器的一個特性
+    )               // 小括弧另起一行縮進,和大括弧的風格保存一致
+}
+
+

在每次循環的開始會創建臨時變量t,然後在每次循環迭代中創建臨時變量x和y。

+

那麽垃Go語言的自動圾收集器是如何知道一個變量是何時可以被迴收的呢?這里我們可以避開完整的技術細節,基本的實現思路是,從每個包級的變量和每個當前運行函數的每一個局部變量開始,通過指針或引用的訪問路徑遍歷,是否可以找到該變量。如果不存在這樣的訪問路徑,那麽説明該變量是不可達的,也就是説它是否存在併不會影響程序後續的計算結果。

+

因爲一個變量的有效週期隻取決於是否可達,因此一個循環迭代內部的局部變量的生命週期可能超出其局部作用域。同時,局部變量可能在函數返迴之後依然存在。

+

編譯器會自動選擇在棧上還是在堆上分配局部變量的存儲空間,但可能令人驚訝的是,這個選擇併不是由用var還是new聲明變量的方式決定的。

+
var global *int
 
-func f() {                 func g() { 
-    var x int                  y := new(int) 
-    x = 1                      *y = 1 
-    global = &x            } 
+func f() {                 func g() {
+    var x int                  y := new(int)
+    x = 1                      *y = 1
+    global = &x            }
 }
 
-

這里的 x 必鬚在堆上分配, 因爲它在函數退齣後依然可以通過包的 global 變量找到, 雖然它是在函數內部定義的; 我們説這個 x 局部變量從 函數 f 中逃逸了. 相反, 當 g 函數返迴時, 變量 *y 將是不可達的, 也就是可以被迴收的. 因此, *y 併沒有從 函數 g 逃逸, 編譯器可以選擇在棧上分配 *y 的存儲空間, 雖然這里用的是 new 方式. -在任何時候, 你併不需爲了編寫正確的代碼而要考慮變量的逃逸行爲, 要記住的是, 逃逸的變量需要額外分配內存, 同時對性能的優化會産生一定的影響.

-

垃圾收集器對編寫正確的代碼是一個鉅大的幫助, 但併不是説你完全不用考慮內存了. 你雖然不需要顯式地分配和釋放內存, 但是要編寫高效的程序你還是需要知道變量的生命週期. 例如, 將指向短生命週期對象的指針保存到具有長生命週期的對象中, 特别是全局變量時, 會阻止對短生命週期對象的垃圾迴收.

+

這里的x變量必鬚在堆上分配,因爲它在函數退出後依然可以通過包一級的global變量找到,雖然它是在函數內部定義的;用Go語言的術語説,這個x局部變量從函數f中逃逸了。相反,當g函數返迴時,變量*y將是不可達的,也就是説可以馬上被迴收的。因此,*y併沒有從函數g中逃逸,編譯器可以選擇在棧上分配*y的存儲空間(譯註:也可以選擇在堆上分配,然後由Go語言的GC迴收這個變量的內存空間),雖然這里用的是new方式。其實在任何時候,你併不需爲了編寫正確的代碼而要考慮變量的逃逸行爲,要記住的是,逃逸的變量需要額外分配內存,同時對性能的優化可能會産生細微的影響。

+

Go語言的自動垃圾收集器對編寫正確的代碼是一個鉅大的幫助,但也併不是説你完全不用考慮內存了。你雖然不需要顯式地分配和釋放內存,但是要編寫高效的程序你依然需要了解變量的生命週期。例如,如果將指向短生命週期對象的指針保存到具有長生命週期的對象中,特别是保存到全局變量時,會阻止對短生命週期對象的垃圾迴收(從而可能影響程序的性能)。

@@ -2235,7 +2247,7 @@ fmt.Println(p == q) // "false" diff --git a/ch2/ch2-04.html b/ch2/ch2-04.html index ee77552..16184fa 100644 --- a/ch2/ch2-04.html +++ b/ch2/ch2-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,28 +2024,28 @@

2.4. 賦值

-

使用賦值語句可以更新一個變量的值, 最簡單的賦值語句是將要被賦值的變量放在 = 的左邊, 新值的表達式放在 = 右邊.

+

使用賦值語句可以更新一個變量的值,最簡單的賦值語句是將要被賦值的變量放在=的左邊,新值的表達式放在=的右邊。

x = 1                       // 命令變量的賦值
 *p = true                   // 通過指針間接賦值
 person.name = "bob"         // 結構體字段賦值
-count[x] = count[x] * scale // 數組, 切片 或 字典的 元素賦值
+count[x] = count[x] * scale // 數組、slice或map的元素賦值
 
-

特定的賦值語句和二元算術複合操作有一個簡潔形式, 例如上面最後的語句可以重寫爲:

+

特定的二元算術運算符和賦值語句的複合操作有一個簡潔形式,例如上面最後的語句可以重寫爲:

count[x] *= scale
 
-

這樣可以省去對變量表達式的重複計算.

-

數值變量也可以支持 ++ 遞增和 -- 遞減語句:

+

這樣可以省去對變量表達式的重複計算。

+

數值變量也可以支持++遞增和--遞減語句(譯註:自增和自減是語句,而不是表達式,因此x = i++之類的表達式是錯誤的):

v := 1 
-v++    // 等價方式 v = v + 1; v 變成 2 
-v--    // 等價方式 v = v - 1; v 變成 1
+v++    // 等價方式 v = v + 1;v 變成 2 
+v--    // 等價方式 v = v - 1;v 變成 1
 

2.4.1. 元組賦值

-

元組賦值是另一種形式的賦值語句, 允許同時更新多個變量的值. 在賦值之前, 賦值語句右邊的所有表達式將會先進行求值, 然後再統一更新左邊變量的值. 這對於處理有些同時齣現在元組賦值語句左右兩邊的變量很有幫助, 例如我們可以這樣交換兩個變量的值:

+

元組賦值是另一種形式的賦值語句,它允許同時更新多個變量的值。在賦值之前,賦值語句右邊的所有表達式將會先進行求值,然後再統一更新左邊對應變量的值。這對於處理有些同時出現在元組賦值語句左右兩邊的變量很有幫助,例如我們可以這樣交換兩個變量的值:

x, y = y, x
 
 a[i], a[j] = a[j], a[i]
 
-

或者是計算兩個整數值的的最大公約數(GCD):

+

或者是計算兩個整數值的的最大公約數(GCD)(譯註:GCD不是那個敏感字,而是greatest common divisor的縮寫,歐幾里德的GCD是最早的非平凡算法):

func gcd(x, y int) int {
     for y != 0 {
         x, y = y, x%y
@@ -2049,7 +2053,7 @@ a[i], a[j] = a[j], a[i]
     return x
 }
 
-

或者是計算斐波納契數列(Fibonacci)的第N個數:

+

或者是計算斐波納契數列(Fibonacci)的第N個數:

func fib(n int) int {
     x, y := 0, 1
     for i := 0; i < n; i++ {
@@ -2058,39 +2062,44 @@ a[i], a[j] = a[j], a[i]
     return x
 }
 
-

元組賦值也可以使一繫列瑣碎賦值更緊湊(譯註: 特别是在for循環的初始化部分),

+

元組賦值也可以使一繫列瑣碎賦值更加緊湊(譯註: 特别是在for循環的初始化部分),

i, j, k = 2, 3, 5
 
-

但如果表達式太複雜的話, 應該盡量避免元組賦值; 因爲一個個單獨的賦值語句的可讀性會更好.

-

某些表達式會産生多個值, 比如調用一個有多個返迴值的函數. -當這樣一個函數調用齣現在元組賦值右邊的表達式中時(譯註: 右邊不能再有其他表達式), 左邊變量的數目必鬚和右邊一致.

+

但如果表達式太複雜的話,應該盡量避免過度使用元組賦值;因爲每個變量單獨賦值語句的寫法可讀性會更好。

+

有些表達式會産生多個值,比如調用一個有多個返迴值的函數。當這樣一個函數調用出現在元組賦值右邊的表達式中時(譯註:右邊不能再有其它表達式),左邊變量的數目必鬚和右邊一致。

f, err = os.Open("foo.txt") // function call returns two values
 
-

通常, 這類函數會用額外的返迴值表達某種錯誤類型, 例如 os.Open 是返迴一個 error 類型的錯誤, 還有一些是返迴布爾值, 通常被稱爲ok. 在稍後我們看到的三個操作都是類似的行爲. 如果 字典査找(§4.3), 類型斷言(§7.10), 或 通道接收(§8.4.2) 齣現在賦值語句的右邊, 它們都將産生兩個結果, 有一個額外的布爾結果表示操作是否成功:

+

通常,這類函數會用額外的返迴值來表達某種錯誤類型,例如os.Open是用額外的返迴值返迴一個error類型的錯誤,還有一些是用來返迴布爾值,通常被稱爲ok。在稍後我們將看到的三個操作都是類似的用法。如果map査找(§4.3)、類型斷言(§7.10)或通道接收(§8.4.2)出現在賦值語句的右邊,它們都可能會産生兩個結果,有一個額外的布爾結果表示操作是否成功:

v, ok = m[key]             // map lookup
 v, ok = x.(T)              // type assertion
 v, ok = <-ch               // channel receive
 
-

和變量的聲明一樣, 我們可以用下劃線空白標識符 _ 來丟棄不需要的值.

+

譯註:map査找(§4.3)、類型斷言(§7.10)或通道接收(§8.4.2)出現在賦值語句的右邊時,併不一定是産生兩個結果,也可能隻産生一個結果。對於值産生一個結果的情形,map査找失敗時會返迴零值,類型斷言失敗時會發送運行時panic異常,通道接收失敗時會返迴零值(阻塞不算是失敗)。例如下面的例子:

+
v = m[key]                // map査找,失敗時返迴零值
+v = x.(T)                 // type斷言,失敗時panic異常
+v = <-ch                  // 管道接收,失敗時返迴零值(阻塞不算是失敗)
+
+_, ok = m[key]            // map返迴2個值
+_, ok = mm[""], false     // map返迴1個值
+_ = mm[""]                // map返迴1個值
+
+

和變量聲明一樣,我們可以用下劃線空白標識符_來丟棄不需要的值。

_, err = io.Copy(dst, src) // 丟棄字節數
-_, ok = x.(T)              // 隻檢測類型, 忽略具體值
+_, ok = x.(T)              // 隻檢測類型,忽略具體值
 

2.4.2. 可賦值性

-

賦值語句是顯示的賦值形式, 但是程序中還有很多地方會發送隱式的賦值行爲: 函數調用將隱式地將調用參數的值賦值給函數的參數變量, 一個返迴語句將隱式地將返迴操作的值賦值給結果變量, 一個複合類型的字面量(§4.2)也會産生賦值行爲. 例如下面的語句:

+

賦值語句是顯式的賦值形式,但是程序中還有很多地方會發生隱式的賦值行爲:函數調用會隱式地將調用參數的值賦值給函數的參數變量,一個返迴語句將隱式地將返迴操作的值賦值給結果變量,一個複合類型的字面量(§4.2)也會産生賦值行爲。例如下面的語句:

medals := []string{"gold", "silver", "bronze"}
 
-

隱式地對切片的每個元素進行賦值操作, 類似這樣寫的行爲:

+

隱式地對slice的每個元素進行賦值操作,類似這樣寫的行爲:

medals[0] = "gold" 
 medals[1] = "silver" 
 medals[2] = "bronze"
 
-

字典和管道的元素, 雖然不是普通的變量, 但是也有類似的隱式賦值行爲.

-

不管是隱式還是顯示地賦值, 在賦值語句坐標的變量和右邊最終的求到的值必鬚有相同的數據類型. 更直白地説, 隻有右邊的值對於左邊的變量是可賦值的, 賦值語句纔是允許的.

-

可賦值性的規則對於不同類型有不同要求, 對每個新類型有關的地方我們會專門解釋. -對於目前我們已經討論過的類型, 它的規則是簡單的: 類型必鬚完全匹配, nil 可以賦值給任何指針或引用類型的變量. 常量(§3.6)有更靈活的規則, 這樣可以避免不必要的顯示類型轉換.

-

對於兩個值是否可以用 ==!= 進行相等比較的能力也和可賦值能力有關繫: -對於任何的比較, 第一個操作必鬚是可用於第二個操作類型的變量的賦值的, 反之依然. -和前面一樣, 我們會對每個新類型比較有關的地方會做專門解釋.

+

map和chan的元素,雖然不是普通的變量,但是也有類似的隱式賦值行爲。

+

不管是隱式還是顯式地賦值,在賦值語句左邊的變量和右邊最終的求到的值必鬚有相同的數據類型。更直白地説,隻有右邊的值對於左邊的變量是可賦值的,賦值語句才是允許的。

+

可賦值性的規則對於不同類型有着不同要求,對每個新類型特殊的地方我們會專門解釋。對於目前我們已經討論過的類型,它的規則是簡單的:類型必鬚完全匹配,nil可以賦值給任何指針或引用類型的變量。常量(§3.6)則有更靈活的賦值規則,因爲這樣可以避免不必要的顯式的類型轉換。

+

對於兩個值是否可以用==!=進行相等比較的能力也和可賦值能力有關繫:對於任何類型的值的相等比較,第二個值必鬚是對第一個值類型對應的變量是可賦值的,反之依然。和前面一樣,我們會對每個新類型比較特殊的地方做專門的解釋。

@@ -2122,7 +2131,7 @@ medals[2] = "bro diff --git a/ch2/ch2-05.html b/ch2/ch2-05.html index ba45968..2e78eb4 100644 --- a/ch2/ch2-05.html +++ b/ch2/ch2-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,18 +2023,19 @@
-

2.5. 類型聲明

-

變量或表達式的類型定義了對應存儲值的特徵, 例如數值的存儲大小(或者是元素的bit個數), 它們在內部是如何表達的, 是否支持一些操作符, 以及它們自己關聯的方法集,

-

在任何程序中都會有一些變量有着相同的內部實現, 但是表示完全不同的概念. -例如, int 類型的變量可以用來表示一個循環的迭代索引, 或者一個時間戳, 或者一個文件描述符, 或者一個月份; 一個 float64 類型的變量可以用來表示每秒幾米的速度, 或者是不同溫度單位的溫度; -一個字符串可以用來表示一個密碼或者一個顔色的名稱.

-

一個類型的聲明創建了一個新的類型名稱, 和現有類型具有相同的底層結構. -新命名的類型提供了一個方法, 用來分隔不同概念的類型, 卽使它們底層類型相同也是不兼容的.

-
type name underlying-type
+                        

2.5. 類型

+

變量或表達式的類型定義了對應存儲值的屬性特徵,例如數值在內存的存儲大小(或者是元素的bit個數),它們在內部是如何表達的,是否支持一些操作符,以及它們自己關聯的方法集等。

+

在任何程序中都會存在一些變量有着相同的內部結構,但是卻表示完全不同的概念。例如,一個int類型的變量可以用來表示一個循環的迭代索引、或者一個時間戳、或者一個文件描述符、或者一個月份;一個float64類型的變量可以用來表示每秒移動幾米的速度、或者是不同溫度單位下的溫度;一個字符串可以用來表示一個密碼或者一個顔色的名稱。

+

一個類型聲明語句創建了一個新的類型名稱,和現有類型具有相同的底層結構。新命名的類型提供了一個方法,用來分隔不同概念的類型,這樣卽使它們底層類型相同也是不兼容的。

+
type 類型名字 底層類型
 
-

類型的聲明一般齣現在包級别, 因此如果新創建的類型名字名字的首字符大寫, 則在外部包也可以使用.

-

爲了説明類型聲明, 我們將不同溫度單位分别定義爲不同的類型:

-

爲了説明類型聲明,讓我們把不同溫度范圍分爲不同的類型:

+

類型聲明語句一般出現在包一級,因此如果新創建的類型名字的首字符大寫,則在外部包也可以使用。

+

譯註:對於中文漢字,Unicode標誌都作爲小寫字母處理,因此中文的命名默認不能導出;不過国內的用戶針對該問題提出了我們自己的間接,根據RobPike的迴複,在Go2中有可能會將中日韓等字符當作大寫字母處理。下面是RobPik在 Issue763 的迴複:

+
+

A solution that's been kicking around for a while:

+

For Go 2 (can't do it before then): Change the definition to “lower case letters and are package-local; all else is exported”. Then with non-cased languages, such as Japanese, we can write 日本語 for an exported name and 日本語 for a local name. This rule has no effect, relative to the Go 1 rule, with cased languages. They behave exactly the same.

+
+

爲了説明類型聲明,我們將不同溫度單位分别定義爲不同的類型:

gopl.io/ch2/tempconv0
 // Package tempconv performs Celsius and Fahrenheit temperature computations.
 package tempconv
@@ -2043,27 +2048,23 @@
 const (
     AbsoluteZeroC Celsius = -273.15 // 絶對零度
     FreezingC     Celsius = 0       // 結冰點溫度
-    BoilingC      Celsius = 100     // 沸水問題
+    BoilingC      Celsius = 100     // 沸水溫度
 )
 
 func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
 
 func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
 
-

這個包定義了兩種類型, Celsius 和 Fahrenheit 分别對應不同的溫度單位. 它們都有着相同的底層類型 float64, 但是它們是不同的數據類型, 因此它們不可以被相互比較或混在一個表達式計算. 可以區分類型, 可以避免一些像無意中結合單位的溫度進行計算的錯誤; 因爲需要一個類似 Celsius(t) 或 Fahrenheit(t) 顯式的轉型操作纔能將 float64 轉爲對應的類型. Celsius(t) 和 Fahrenheit(t) 是類型轉換操作, 併不是函數調用. 類型轉換不會改變值本身, 但是會使它們的語義發生變化. 另一方面, 函數 CToF 和 FToC 則是對兩個不同的溫度單位進行轉換, 它們會返迴不同的值.

-

對於每一個類型 T, 都有一個對應的類型轉換操作 T(x), 用於將 x 轉爲 T 類型. -隻有當兩個類型的底層基礎類型相同時, 纔允許這種轉型操作, 或者是兩者都是指向相同底層結構的指針類型, -這些轉換隻改變類型而不會影響值本身. 如果x是可以賦值給T類型的, 那麽x必然可以被轉爲T類型, 但是一般沒有必要.

-

數值類型之間的轉型也是允許的, 併且在字符串和一些特定切片之間也是可以轉換的, 在下一章我們會看到這樣的例子. 這類轉換可能改變值的表現. 例如, 將一個浮點數轉爲整數將丟棄小數部分, 將一個字符串轉爲 []byte 切片將拷貝一個字符串數據的副本. 在任何情況下, 運行時不會發送轉換失敗的錯誤(譯註: 錯誤隻會發生在編譯階段).

-

底層數據類型決定了內部結構和表達方式, 也包決定是否可以像底層類型一樣對內置運算符的支持. -這意味着, Celsius 和 Fahrenheit 類型的算術行爲和底層的 float64 類型一樣, 正如你所期望的.

+

我們在這個包聲明了兩種類型:Celsius和Fahrenheit分别對應不同的溫度單位。它們雖然有着相同的底層類型float64,但是它們是不同的數據類型,因此它們不可以被相互比較或混在一個表達式運算。刻意區分類型,可以避免一些像無意中使用不同單位的溫度混合計算導致的錯誤;因此需要一個類似Celsius(t)或Fahrenheit(t)形式的顯式轉型操作才能將float64轉爲對應的類型。Celsius(t)和Fahrenheit(t)是類型轉換操作,它們併不是函數調用。類型轉換不會改變值本身,但是會使它們的語義發生變化。另一方面,CToF和FToC兩個函數則是對不同溫度單位下的溫度進行換算,它們會返迴不同的值。

+

對於每一個類型T,都有一個對應的類型轉換操作T(x),用於將x轉爲T類型(譯註:如果T是指針類型,可能會需要用小括弧包裝T,比如(*int)(0))。隻有當兩個類型的底層基礎類型相同時,才允許這種轉型操作,或者是兩者都是指向相同底層結構的指針類型,這些轉換隻改變類型而不會影響值本身。如果x是可以賦值給T類型的值,那麽x必然也可以被轉爲T類型,但是一般沒有這個必要。

+

數值類型之間的轉型也是允許的,併且在字符串和一些特定類型的slice之間也是可以轉換的,在下一章我們會看到這樣的例子。這類轉換可能改變值的表現。例如,將一個浮點數轉爲整數將丟棄小數部分,將一個字符串轉爲[]byte類型的slice將拷貝一個字符串數據的副本。在任何情況下,運行時不會發生轉換失敗的錯誤(譯註: 錯誤隻會發生在編譯階段)。

+

底層數據類型決定了內部結構和表達方式,也決定是否可以像底層類型一樣對內置運算符的支持。這意味着,Celsius和Fahrenheit類型的算術運算行爲和底層的float64類型是一樣的,正如我們所期望的那樣。

fmt.Printf("%g\n", BoilingC-FreezingC) // "100" °C
 boilingF := CToF(BoilingC)
 fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F
 fmt.Printf("%g\n", boilingF-FreezingC)       // compile error: type mismatch
 
-

比較運算符 ==< 也可以用來比較一個命名類型的變量和另一個有相同類型的變量或相同的底層類型的值做比較. -但是如果兩個值有着不同的類型, 則不能直接進行比較:

+

比較運算符==<也可以用來比較一個命名類型的變量和另一個有相同類型的變量或有相同底層類型的值做比較。但是如果兩個值有着不同的類型,則不能直接進行比較:

var c Celsius
 var f Fahrenheit
 fmt.Println(c == 0)          // "true"
@@ -2071,13 +2072,13 @@ fmt.Println(f >= 0)          // compile error: type mismatch
 fmt.Println(c == Celsius(f)) // "true"!
 
-

註意最後那個語句. 盡管看起來想函數調用, 但是Celsius(f)類型轉換, 併不會改變值, 它僅僅是改變值的類型而已. 測試爲眞的原因是因爲 c 和 g 都是零值.

-

一個命名的類型可以提供符號方便, 特别是可以避免一遍又一遍地書寫複雜類型(譯註: 例如用匿名的結構體定義變量). 雖然對於像float64這種簡單的底層類型沒有簡潔很多, 但是如果是複雜的類型將會簡潔很多, 正如我們卽將討論的結構體類型:

-

命名類型還可以爲該類型的值定義新的行爲. 這些行爲表示爲一組關聯到類型的函數, 我們成爲類型的方法集. 我們將在第六章討論方法的細節, 這里值説寫簡單用法.

-

下面的聲明, Celsius 類型的參數 c 齣現在了函數名的前面, 表示聲明一個 Celsius 類型的 名叫 String 的方法, 方法返迴 帶着 °C 溫度單位 的參數 c 的數字打印字符串:

+

註意最後那個語句。盡管看起來想函數調用,但是Celsius(f)是類型轉換操作,它併不會改變值,僅僅是改變值的類型而已。測試爲眞的原因是因爲c和g都是零值。

+

一個命名的類型可以提供書寫方便,特别是可以避免一遍又一遍地書寫複雜類型(譯註:例如用匿名的結構體定義變量)。雖然對於像float64這種簡單的底層類型沒有簡潔很多,但是如果是複雜的類型將會簡潔很多,特别是我們卽將討論的結構體類型。

+

命名類型還可以爲該類型的值定義新的行爲。這些行爲表示爲一組關聯到該類型的函數集合,我們稱爲類型的方法集。我們將在第六章中討論方法的細節,這里值説寫簡單用法。

+

下面的聲明語句,Celsius類型的參數c出現在了函數名的前面,表示聲明的是Celsius類型的一個叫名叫String的方法,該方法返迴該類型對象c帶着°C溫度單位的字符串:

func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }
 
-

許多類型都會定義個 String 方法, 因爲當然用 fmt 包的打印方法時, 將會優先使用 String 方法返迴的結果打印, 將在 7.1節 講述.

+

許多類型都會定義一個String方法,因爲當使用fmt包的打印方法時,將會優先使用該類型對應的String方法返迴的結果打印,我們將在7.1節講述。

c := FToC(212.0)
 fmt.Println(c.String()) // "100°C"
 fmt.Printf("%v\n", c)   // "100°C"; no need to call String explicitly
@@ -2117,7 +2118,7 @@ fmt.Println(float64(c)) 
diff --git a/ch2/ch2-06.html b/ch2/ch2-06.html
index 02d7ee6..fe18b86 100644
--- a/ch2/ch2-06.html
+++ b/ch2/ch2-06.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,12 +2024,12 @@

2.6. 包和文件

-

Go語言中的包和其他語言的庫或模塊概念類似, 目的都是爲了支持模塊好, 封裝, 單獨編譯和代碼重用. 一個包的源代碼保存在一個或多個以.爲後綴名的文件中, 通常一個包所在目録路徑的後綴是包的導入路徑; 例如包 gopl.io/ch1/helloworld 對應的目録路徑是 $GOPATH/src/gopl.io/ch1/helloworld.

-

每個包作爲一個獨立的名字空間. 例如, 在 image 包中的 Decode 函數 和 unicode/utf16 包中的 Decode 函數是不同的. 要在外部包引用該函數, 必鬚顯式使用 image.Decode 或 utf16.Decode 訪問.

-

包可以讓我們通過控製那些名字是外部可見的來隱藏信息. 在Go中, 一個簡單的規則是: 如果一個名字是大寫字母開頭的, 那麽該名字是導齣的.

-

爲了演示基本的用法, 假設我們的溫度轉換軟件已經很流行, 我們希望到Go社區也能使用這個包. 我們該如何做呢?

-

讓我們創建一個名爲 gopl.io/ch2/tempconv 的包, 是前面例子的一個改進版本. (我們約定我們的例子都是以章節順序來編號的, 這樣的路徑更容易閲讀.) 包代碼存儲在兩個文件, 用來演示如何在一個文件聲明然後在其他的文件訪問; 在現實中, 這樣小的包一般值需要一個文件.

-

我們把變量的聲明, 對應的常量, 還有方法都放到 tempconv.go 文件:

+

Go語言中的包和其他語言的庫或模塊的概念類似,目的都是爲了支持模塊化、封裝、單獨編譯和代碼重用。一個包的源代碼保存在一個或多個以.go爲文件後綴名的源文件中,通常一個包所在目録路徑的後綴是包的導入路徑;例如包gopl.io/ch1/helloworld對應的目録路徑是$GOPATH/src/gopl.io/ch1/helloworld。

+

每個包都對應一個獨立的名字空間。例如,在image包中的Decode函數和在unicode/utf16包中的 Decode函數是不同的。要在外部引用該函數,必鬚顯式使用image.Decode或utf16.Decode形式訪問。

+

包還可以讓我們通過控製哪些名字是外部可見的來隱藏內部實現信息。在Go語言中,一個簡單的規則是:如果一個名字是大寫字母開頭的,那麽該名字是導出的(譯註:因爲漢字不區分大小寫,因此漢字開頭的名字是沒有導出的)。

+

爲了演示包基本的用法,先假設我們的溫度轉換軟件已經很流行,我們希望到Go語言社區也能使用這個包。我們該如何做呢?

+

讓我們創建一個名爲gopl.io/ch2/tempconv的包,這是前面例子的一個改進版本。(我們約定我們的例子都是以章節順序來編號的,這樣的路徑更容易閲讀)包代碼存儲在兩個源文件中,用來演示如何在一個源文件聲明然後在其他的源文件訪問;雖然在現實中,這樣小的包一般隻需要一個文件。

+

我們把變量的聲明、對應的常量,還有方法都放到tempconv.go源文件中:

gopl.io/ch2/tempconv
 // Package tempconv performs Celsius and Fahrenheit conversions.
 package tempconv
@@ -2044,7 +2048,7 @@
 func (c Celsius) String() string    { return fmt.Sprintf("%g°C", c) }
 func (f Fahrenheit) String() string { return fmt.Sprintf("%g°F", f) }
 
-

轉換函數放在 conv.go 文件中:

+

轉換函數則放在另一個conv.go源文件中:

package tempconv
 
 // CToF converts a Celsius temperature to Fahrenheit.
@@ -2053,22 +2057,19 @@
 // FToC converts a Fahrenheit temperature to Celsius.
 func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
 
-

每個文件都是以包的聲明語句開始, 用來指定包的名字. 當包被導入的時候, 包內部的成員將通過類似 tempconv.CToF 的方式訪問. 包級别的名字, 例如在一個文件聲明的類型和常量, 在同一個包的其他文件也是可以直接訪問的, -就好像所有代碼都在一個文件一樣. 要註意的是 tempconv.go 文件導入了 fmt 包, 但是 conv.go 文件併沒有, 因爲它併沒有用到 fmt 包.

-

因爲包級别的常量名都是以大寫字母開頭, 它們也是可以像 tempconv.AbsoluteZeroC 這樣被訪問的:

+

每個源文件都是以包的聲明語句開始,用來指名包的名字。當包被導入的時候,包內的成員將通過類似tempconv.CToF的形式訪問。而包級别的名字,例如在一個文件聲明的類型和常量,在同一個包的其他源文件也是可以直接訪問的,就好像所有代碼都在一個文件一樣。要註意的是tempconv.go源文件導入了fmt包,但是conv.go源文件併沒有,因爲這個源文件中的代碼併沒有用到fmt包。

+

因爲包級别的常量名都是以大寫字母開頭,它們可以像tempconv.AbsoluteZeroC這樣被外部代碼訪問:

fmt.Printf("Brrrr! %v\n", tempconv.AbsoluteZeroC) // "Brrrr! -273.15°C"
 
-

要將 攝氏溫度轉換爲 華氏溫度, 需要先導入 gopl.io/ch2/tempconv, 然後就可以使用下面的代碼轉換了:

+

要將攝氏溫度轉換爲華氏溫度,需要先用import語句導入gopl.io/ch2/tempconv包,然後就可以使用下面的代碼進行轉換了:

fmt.Println(tempconv.CToF(tempconv.BoilingC)) // "212°F"
 
-

在每個文件的包聲明前僅跟着的註釋是包註釋(§10.7.4). 通常, 第一句應該先是包的功能概要. -一個包通常隻有一個文件有包註釋. 如果包註釋很大, 通常會放到一個獨立的 doc.go 文件中.

-

練習 2.1: 向 tempconv 包 添加類型, 常量和函數用來處理 Kelvin 絶對溫度的轉換, -Kelvin 絶對零度是 −273.15°C, Kelvin 絶對溫度1K和攝氏度1°C的單位間隔是一樣的.

+

在每個源文件的包聲明前僅跟着的註釋是包註釋(§10.7.4)。通常,包註釋的第一句應該先是包的功能概要説明。一個包通常隻有一個源文件有包註釋(譯註:如果有多個包註釋,目前的文檔工具會根據源文件名的先後順序將它們鏈接爲一個包註釋)。如果包註釋很大,通常會放到一個獨立的doc.go文件中。

+

練習 2.1: 向tempconv包添加類型、常量和函數用來處理Kelvin絶對溫度的轉換,Kelvin 絶對零度是−273.15°C,Kelvin絶對溫度1K和攝氏度1°C的單位間隔是一樣的。

2.6.1. 導入包

-

在Go程序中, 每個包都是有一個全局唯一的導入路徑. 聲明中類似 "gopl.io/ch2/tempconv" 的字符串對應導入路徑. 語言的規范併沒有定義這些字符串的具體含義或包來自哪里, 它們是由工具來解釋. 當使用 go 工具箱時(第十章), 一個導入路徑代表一個目録中的一個或多個Go源文件.

-

除了到導入路徑, 每個包還有一個包名, 包名一般是短小的(也不要求是是唯一的), 包名在包的聲明處指定. 按照慣例, 一個包的名字和包的導入路徑的最後一個字段相同, 例如 gopl.io/ch2/tempconv 包的名字是 tempconv.

-

要使用 gopl.io/ch2/tempconv 包, 需要先導入:

+

在Go語言程序中,每個包都是有一個全局唯一的導入路徑。導入語句中類似"gopl.io/ch2/tempconv"的字符串對應包的導入路徑。Go語言的規范併沒有定義這些字符串的具體含義或包來自哪里,它們是由構建工具來解釋的。當使用Go語言自帶的go工具箱時(第十章),一個導入路徑代表一個目録中的一個或多個Go源文件。

+

除了包的導入路徑,每個包還有一個包名,包名一般是短小的名字(併不要求包名是唯一的),包名在包的聲明處指定。按照慣例,一個包的名字和包的導入路徑的最後一個字段相同,例如gopl.io/ch2/tempconv包的名字一般是tempconv。

+

要使用gopl.io/ch2/tempconv包,需要先導入:

gopl.io/ch2/cf 
 // Cf converts its numeric argument to Celsius and Fahrenheit. 
 package main 
@@ -2095,8 +2096,8 @@ Kelvin 絶對零度是 −273.15°C, Kelvin &#
     } 
 }
 
-

導入聲明將導入的包綁定到一個短小的名字, 然後通過該名字就可以引用包中導齣的全部內容. 上面的導入聲明將允許我們以 tempconv.CToF 的方式來訪問 gopl.io/ch2/tempconv 包中的內容. 默認情況下, 導入的包綁定到 tempconv 名字, 但是我們也可以綁定到另一個名稱, 以避免名字衝突(§10.3).

-

cf 程序將命令行輸入的一個溫度在 Celsius 和 Fahrenheit 之間轉換:

+

導入語句將導入的包綁定到一個短小的名字,然後通過該短小的名字就可以引用包中導出的全部內容。上面的導入聲明將允許我們以tempconv.CToF的形式來訪問gopl.io/ch2/tempconv包中的內容。在默認情況下,導入的包綁定到tempconv名字(譯註:這包聲明語句指定的名字),但是我們也可以綁定到另一個名稱,以避免名字衝突(§10.3)。

+

cf程序將命令行輸入的一個溫度在Celsius和Fahrenheit溫度單位之間轉換:

$ go build gopl.io/ch2/cf 
 $ ./cf 32 
 32°F = 0°C, 32°C = 89.6°F 
@@ -2104,25 +2105,24 @@ $ ./cf 212
 212°F = 100°C, 212°C = 413.6°F 
 $ ./cf -40 
 -40°F = -40°C, -40°C = -40°F
-

如果導入一個包, 但是沒有使用該包將被當作一個錯誤. 這種強製檢測可以有效減少不必要的依賴, 雖然在調試期間會讓人討厭, 因爲刪除一個類似 log.Print("got here!") 的打印可能導致需要同時刪除 log 包導入聲明, 否則, 編譯器將會發齣一個錯誤. 在這種情況下, 我們需要將不必要的導入刪除或註釋掉.

-

不過有更好的解決方案, 我們可以使用 golang.org/x/tools/cmd/goimports 工具, 它可以根據需要自動添加或刪除導入的包; 許多編輯器都可以集成 goimports 工具, 然後在保存文件的時候自動允許它. 類似的還有 gofmt 工具, 可以用來格式化Go源文件.

-

練習 2.2: 寫一個通用的單位轉換程序, 用類似 cf 程序的方式從命令行讀取參數, 如果缺省的話則是從標準輸入讀取參數, 然後做類似 Celsius 和 Fahrenheit 的轉換, -長度單位對應英尺和米, 重量單位對應磅和公斤 等等.

+

如果導入了一個包,但是又沒有使用該包將被當作一個編譯錯誤處理。這種強製規則可以有效減少不必要的依賴,雖然在調試期間可能會讓人討厭,因爲刪除一個類似log.Print("got here!")的打印語句可能導致需要同時刪除log包導入聲明,否則,編譯器將會發出一個錯誤。在這種情況下,我們需要將不必要的導入刪除或註釋掉。

+

不過有更好的解決方案,我們可以使用golang.org/x/tools/cmd/goimports導入工具,它可以根據需要自動添加或刪除導入的包;許多編輯器都可以集成goimports工具,然後在保存文件的時候自動運行。類似的還有gofmt工具,可以用來格式化Go源文件。

+

練習 2.2: 寫一個通用的單位轉換程序,用類似cf程序的方式從命令行讀取參數,如果缺省的話則是從標準輸入讀取參數,然後做類似Celsius和Fahrenheit的單位轉換,長度單位可以對應英尺和米,重量單位可以對應磅和公斤等。

2.6.2. 包的初始化

-

包的初始化首先是解決包級變量的依賴順序, 然後安裝包級變量聲明齣現的順序依次初始化:

+

包的初始化首先是解決包級變量的依賴順序,然後安照包級變量聲明出現的順序依次初始化:

var a = b + c // a 第三個初始化, 爲 3
 var b = f()   // b 第二個初始化, 爲 2, 通過調用 f (依賴c)
 var c = 1     // c 第一個初始化, 爲 1
 
 func f() int { return c + 1 }
 
-

如果包中含有多個 .go 文件, 它們按照發給編譯器的順序進行初始化, Go的構建工具首先將 .go 文件根據文件名排序, 然後依次調用編譯器編譯.

-

對於在包級别聲明的變量, 如果有初始化表達式則用表達式初始化, 還有一些沒有初始化表達式的, 例如 某些表格數據 初始化併不是一個簡單的賦值過程. 在這種情況下, 我們可以用 init 初始化函數來簡化工作. 每個文件都可以包含多個 init 初始化函數

+

如果包中含有多個.go源文件,它們將按照發給編譯器的順序進行初始化,Go語言的構建工具首先會將.go文件根據文件名排序,然後依次調用編譯器編譯。

+

對於在包級别聲明的變量,如果有初始化表達式則用表達式初始化,還有一些沒有初始化表達式的,例如某些表格數據初始化併不是一個簡單的賦值過程。在這種情況下,我們可以用一個特殊的init初始化函數來簡化初始化工作。每個文件都可以包含多個init初始化函數

func init() { /* ... */ }
 
-

這樣的init初始化函數除了不能被調用或引用外, 其他行爲和普通函數類似. 在每個文件中的init初始化函數, 在程序開始執行時按照它們聲明的順序被自動調用.

-

每個包在解決依賴的前提下, 以導入聲明的順序初始化, 每個包隻會被初始化一次. 因此, 如果一個 p 包導入了 q 包, 那麽在 p 包初始化的時候可以認爲 q 包已經初始化過了. 初始化工作是自下而上進行的, main 包最後被初始化. 以這種方式, 確保 在 main 函數執行之前, 所有的包都已經初始化了.

-

下面的代碼定義了一個 PopCount 函數, 用於返迴一個數字中含二進製1bit的個數. 它使用 init 初始化函數來生成輔助表格 pc, pc 表格用於處理每個8bit寬度的數字含二進製的1bit的個數, 這樣的話在處理64bit寬度的數字時就沒有必要循環64次, 隻需要8次査表就可以了. (這併不是最快的統計1bit數目的算法, 但是他可以方便演示init函數的用法, 併且演示了如果預生成輔助表格, 這是編程中常用的技術.)

+

這樣的init初始化函數除了不能被調用或引用外,其他行爲和普通函數類似。在每個文件中的init初始化函數,在程序開始執行時按照它們聲明的順序被自動調用。

+

每個包在解決依賴的前提下,以導入聲明的順序初始化,每個包隻會被初始化一次。因此,如果一個p包導入了q包,那麽在p包初始化的時候可以認爲q包必然已經初始化過了。初始化工作是自下而上進行的,main包最後被初始化。以這種方式,可以確保在main函數執行之前,所有依然的包都已經完成初始化工作了。

+

下面的代碼定義了一個PopCount函數,用於返迴一個數字中含二進製1bit的個數。它使用init初始化函數來生成輔助表格pc,pc表格用於處理每個8bit寬度的數字含二進製的1bit的bit個數,這樣的話在處理64bit寬度的數字時就沒有必要循環64次,隻需要8次査表就可以了。(這併不是最快的統計1bit數目的算法,但是它可以方便演示init函數的用法,併且演示了如果預生成輔助表格,這是編程中常用的技術)。

gopl.io/ch2/popcount
 package popcount
 
@@ -2147,14 +2147,21 @@ $ ./cf -40
         pc[byte(x>>(7*8))])
 }
 
-

要註意的是 init 函數中, range 循環隻使用了索引, 省略了沒有用到的值部分. -循環也可以這樣寫:

+

譯註:對於pc這類需要複雜處理的初始化,可以通過將初始化邏輯包裝爲一個匿名函數處理,像下面這樣:

+
// pc[i] is the population count of i.
+var pc [256]byte = func() (pc [256]byte) {
+    for i := range pc {
+        pc[i] = pc[i/2] + byte(i&1)
+    }
+}()
+
+

要註意的是在init函數中,range循環隻使用了索引,省略了沒有用到的值部分。循環也可以這樣寫:

for i, _ := range pc {
 
-

我們在下一節和10.5節還將看到其它使用init函數的地方.

-

練習2.3: 重寫 PopCount 函數, 用一個循環代替單一的表達式. 比較兩個版本的性能. (11.4節將展示如何繫統地比較兩個不同實現的性能.)

-

練習2.4: 用移位的算法重寫 PopCount 函數, 每次測試最右邊的1bit, 然後統計總數. 比較和査表算法的性能差異.

-

練習2.5: 表達式 x&(x-1) 用於將 x 的最低的一個1bit位清零. 使用這個格式重寫 PopCount 函數, 然後比較性能.

+

我們在下一節和10.5節還將看到其它使用init函數的地方。

+

練習 2.3: 重寫PopCount函數,用一個循環代替單一的表達式。比較兩個版本的性能。(11.4節將展示如何繫統地比較兩個不同實現的性能。)

+

練習 2.4: 用移位算法重寫PopCount函數,每次測試最右邊的1bit,然後統計總數。比較和査表算法的性能差異。

+

練習 2.5: 表達式x&(x-1)用於將x的最低的一個非零的bit位清零。使用這個算法重寫PopCount函數,然後比較性能。

@@ -2186,7 +2193,7 @@ $ ./cf -40 diff --git a/ch2/ch2-07.html b/ch2/ch2-07.html index d3e23e3..15a8b52 100644 --- a/ch2/ch2-07.html +++ b/ch2/ch2-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,13 +2024,13 @@

2.7. 作用域

-

一個聲明語句將程序中的實體和一個名字關聯, 比如一個函數或一個變量. 聲明的作用域是指源代碼中可以有效使用這個名字的范圍.

-

不要將作用域和生命週期混爲一談. 聲明的作用域對應的是一個源代碼的文本區域; 它是一個編譯時的屬性. 一個變量的生命週期是程序運行時變量存在的有效時間段, 在此時間區域內存它可以被程序的其他部分引用. 是一個運行時的概念.

-

語法塊是由花括弧所包含的一繫列語句, 就像函數體或循環體那樣. 語法塊內部聲明的名字是無法被外部語法塊訪問的. 語法決定了內部聲明的名字的作用域范圍. 我們可以這樣理解, 語法塊可以包含其他類似組批量聲明等沒有用花括弧包含的代碼, 我們稱之爲詞滙塊. 有一個語法決爲整個源代碼, 稱爲全局塊; 然後是每個包的語法決; 每個 for, if 和 switch 語句的語法決; 每個 switch 或 select 分支的 語法決; 當然也包含顯示編寫的語法塊(花括弧包含).

-

聲明的詞法域決定了作用域范圍是大還是小. 內置的類型, 函數和常量, 比如 int, len 和 true 等是在全局作用域的, 可以在整個程序中直接使用. 任何在在函數外部(也就是包級作用域)聲明的名字可以在同一個包的任何Go文件訪問. 導入的包, 例如 tempconv 導入的 fmt 包, 則是對應文件級的作用域, 因此隻能在當前的文件中訪問 fmt 包, 當前包的其它文件無法訪問當前文件導入的包. 還有許多聲明, 比如 tempconv.CToF 函數中的變量 c, 則是局部作用域的, 它隻能在函數內部(甚至隻能是某些部分)訪問.

-

控製流標籤, 例如 break, continue 或 goto 後面跟着的那種標籤, 則是函數級的作用域.

-

一個程序可能包含多個同名的聲明, 隻有它們在不同的詞法域就沒有關繫. 例如, 你可以聲明一個局部變量, 和包級的變量同名. 或者是 2.3.3節的那樣, 你可以將一個函數參數的名字聲明爲 new, 雖然內置的new是全局作用域的. 但是物極必反, 如果濫用重名的特性, 可能導致程序很難閲讀.

-

當編譯器遇到一個名字引用, 它看起來像一個聲明, 它首先從最內層的詞法域向全局的作用域査找. 如果査找失敗, 則報告 "未聲明的名字" 這樣的錯誤. 如果名字在內部和外部的塊分别聲明, 則內部塊的聲明首先被找到. 在這種情況下, 內部聲明屏蔽了外部同名的聲明, 讓外部的聲明無法被訪問:

+

一個聲明語句將程序中的實體和一個名字關聯,比如一個函數或一個變量。聲明語句的作用域是指源代碼中可以有效使用這個名字的范圍。

+

不要將作用域和生命週期混爲一談。聲明語句的作用域對應的是一個源代碼的文本區域;它是一個編譯時的屬性。一個變量的生命週期是指程序運行時變量存在的有效時間段,在此時間區域內它可以被程序的其他部分引用;是一個運行時的概念。

+

語法塊是由花括弧所包含的一繫列語句,就像函數體或循環體花括弧對應的語法塊那樣。語法塊內部聲明的名字是無法被外部語法塊訪問的。語法決定了內部聲明的名字的作用域范圍。我們可以這樣理解,語法塊可以包含其他類似組批量聲明等沒有用花括弧包含的代碼,我們稱之爲語法塊。有一個語法塊爲整個源代碼,稱爲全局語法塊;然後是每個包的包語法決;每個for、if和switch語句的語法決;每個switch或select的分支也有獨立的語法決;當然也包括顯式書寫的語法塊(花括弧包含的語句)。

+

聲明語句對應的詞法域決定了作用域范圍的大小。對於內置的類型、函數和常量,比如int、len和true等是在全局作用域的,因此可以在整個程序中直接使用。任何在在函數外部(也就是包級語法域)聲明的名字可以在同一個包的任何源文件中訪問的。對於導入的包,例如tempconv導入的fmt包,則是對應源文件級的作用域,因此隻能在當前的文件中訪問導入的fmt包,當前包的其它源文件無法訪問在當前源文件導入的包。還有許多聲明語句,比如tempconv.CToF函數中的變量c,則是局部作用域的,它隻能在函數內部(甚至隻能是局部的某些部分)訪問。

+

控製流標號,就是break、continue或goto語句後面跟着的那種標號,則是函數級的作用域。

+

一個程序可能包含多個同名的聲明,隻要它們在不同的詞法域就沒有關繫。例如,你可以聲明一個局部變量,和包級的變量同名。或者是像2.3.3節的例子那樣,你可以將一個函數參數的名字聲明爲new,雖然內置的new是全局作用域的。但是物極必反,如果濫用不同詞法域可重名的特性的話,可能導致程序很難閲讀。

+

當編譯器遇到一個名字引用時,如果它看起來像一個聲明,它首先從最內層的詞法域向全局的作用域査找。如果査找失敗,則報告“未聲明的名字”這樣的錯誤。如果該名字在內部和外部的塊分别聲明過,則內部塊的聲明首先被找到。在這種情況下,內部聲明屏蔽了外部同名的聲明,讓外部的聲明的名字無法被訪問:

func f() {}
 
 var g = "g"
@@ -2038,7 +2042,7 @@
     fmt.Println(h) // compile error: undefined: h
 }
 
-

在函數中詞法域可以深度嵌套, 因此內部的一個聲明可能屏蔽外部的聲明. 還有許多塊是if或for等控製流語句構造的. 下面的代碼有三個不同的變量x, 因爲它們是定義在不同的詞法域的原因. (這個例子隻是爲了演示作用域規則, 但不是好的編程風格.)

+

在函數中詞法域可以深度嵌套,因此內部的一個聲明可能屏蔽外部的聲明。還有許多語法塊是if或for等控製流語句構造的。下面的代碼有三個不同的變量x,因爲它們是定義在不同的詞法域(這個例子隻是爲了演示作用域規則,但不是好的編程風格)。

func main() {
     x := "hello!"
     for i := 0; i < len(x); i++ {
@@ -2050,9 +2054,9 @@
     }
 }
 
-

x[i]x + 'A' - 'a' 聲明初始化的表達式中都引用了外部作用域聲明的x變量, 稍後我們會解釋這個. (註意, 後面的表達式和unicode.ToUpper併不等價.)

-

正如上面所示, 併不是所有的詞法域都顯示地對應到由花括弧包含的語句; 還有一些隱含的規則. 上面的for語句創建了兩個詞法域: 花括弧包含的是顯式的部分是for的循環體, 另外一個隱式的部分則是循環的初始化部分, 比如用於迭代變量 i 的初始化. 隱式的部分的作用域還包含條件測試部分和循環後的迭代部分(i++), 當然也包含循環體.

-

下面的例子同樣有三個不同的x變量, 每個聲明在不同的塊, 一個在函數體塊, 一個在for語句塊, 一個在循環體塊; 隻有兩個塊是顯式創建的:

+

x[i]x + 'A' - 'a'聲明語句的初始化的表達式中都引用了外部作用域聲明的x變量,稍後我們會解釋這個。(註意,後面的表達式與unicode.ToUpper併不等價。)

+

正如上面例子所示,併不是所有的詞法域都顯式地對應到由花括弧包含的語句;還有一些隱含的規則。上面的for語句創建了兩個詞法域:花括弧包含的是顯式的部分是for的循環體部分詞法域,另外一個隱式的部分則是循環的初始化部分,比如用於迭代變量i的初始化。隱式的詞法域部分的作用域還包含條件測試部分和循環後的迭代部分(i++),當然也包含循環體詞法域。

+

下面的例子同樣有三個不同的x變量,每個聲明在不同的詞法域,一個在函數體詞法域,一個在for隱式的初始化詞法域,一個在for循環體詞法域;隻有兩個塊是顯式創建的:

func main() {
     x := "hello"
     for _, x := range x {
@@ -2061,7 +2065,7 @@
     }
 }
 
-

和彿如循環類似, if和switch語句也會在條件部分創建隱式塊, 還有它們對應的執行體塊. 下面的 if-else 測試鏈演示的 x 和 y 的作用域范圍:

+

和for循環類似,if和switch語句也會在條件部分創建隱式詞法域,還有它們對應的執行體詞法域。下面的if-else測試鏈演示了x和y的有效作用域范圍:

if x := f(); x == 0 {
     fmt.Println(x)
 } else if y := g(x); x == y {
@@ -2071,17 +2075,17 @@
 }
 fmt.Println(x, y) // compile error: x and y are not visible here
 
-

第二個if語句嵌套在第一個內部, 因此一個if語句條件塊聲明的變量在第二個if中也可以訪問. switch語句的每個分支也有類似的規則: 條件部分爲一個隱式塊, 然後每個是每個分支的主體塊.

-

在包級别, 聲明的順序併不會影響作用域范圍, 因此一個先聲明的可以引用它自身或者是引用後面的一個聲明, 這可以讓我們定義一些相互嵌套或遞歸的類型或函數. 但是如果一個變量或常量遞歸引用了自身, 則會産生編譯錯誤.

-

在這個程序中:

+

第二個if語句嵌套在第一個內部,因此第一個if語句條件初始化詞法域聲明的變量在第二個if中也可以訪問。switch語句的每個分支也有類似的詞法域規則:條件部分爲一個隱式詞法域,然後每個是每個分支的詞法域。

+

在包級别,聲明的順序併不會影響作用域范圍,因此一個先聲明的可以引用它自身或者是引用後面的一個聲明,這可以讓我們定義一些相互嵌套或遞歸的類型或函數。但是如果一個變量或常量遞歸引用了自身,則會産生編譯錯誤。

+

在這個程序中:

if f, err := os.Open(fname); err != nil { // compile error: unused: f
     return err
 }
 f.ReadByte() // compile error: undefined f
 f.Close()    // compile error: undefined f
 
-

變量 f 的作用域隻有if語句內, 因此後面的語句將無法引入它, 將導致編譯錯誤. 你可能會收到一個局部變量f沒有聲明的錯誤提示, 具體錯誤信息依賴編譯器的實現.

-

通常需要在if之前聲明變量, 這樣可以確保後面的語句依然可以訪問變量:

+

變量f的作用域隻有在if語句內,因此後面的語句將無法引入它,這將導致編譯錯誤。你可能會收到一個局部變量f沒有聲明的錯誤提示,具體錯誤信息依賴編譯器的實現。

+

通常需要在if之前聲明變量,這樣可以確保後面的語句依然可以訪問變量:

f, err := os.Open(fname)
 if err != nil {
     return err
@@ -2089,7 +2093,7 @@ f.Close()    // compile error: undefined f
 f.ReadByte()
 f.Close()
 
-

你可能會考慮通過將ReadByte和Close移動到if的else塊來解決這個問題:

+

你可能會考慮通過將ReadByte和Close移動到if的else塊來解決這個問題:

if f, err := os.Open(fname); err != nil {
     return err
 } else {
@@ -2098,8 +2102,8 @@ f.Close()
     f.Close()
 }
 
-

但這不是Go推薦的做法, Go的習慣是在if中處理錯誤然後直接返迴, 這樣可以確保正常成功執行的語句不需要代碼縮進.

-

要特别註意短的變量聲明的作用域范圍, 考慮下面的程序, 它的目的是穫取當前的工作目録然後保存到一個包級的變量中. 這可以通過直接調用 os.Getwd 完成, 但是將這個從主邏輯中分離齣來可能會更好, 特别是在需要處理錯誤的時候. 函數 log.Fatalf 打印信息, 然後調用 os.Exit(1) 終止程序.

+

但這不是Go語言推薦的做法,Go語言的習慣是在if中處理錯誤然後直接返迴,這樣可以確保正常執行的語句不需要代碼縮進。

+

要特别註意短變量聲明語句的作用域范圍,考慮下面的程序,它的目的是獲取當前的工作目録然後保存到一個包級的變量中。這可以本來通過直接調用os.Getwd完成,但是將這個從主邏輯中分離出來可能會更好,特别是在需要處理錯誤的時候。函數log.Fatalf用於打印日誌信息,然後調用os.Exit(1)終止程序。

var cwd string
 
 func init() {
@@ -2109,8 +2113,8 @@ f.Close()
     }
 }
 
-

雖然cwd在外部已經聲明過, 但是 := 語句還是將 cwd 和 err 重新聲明爲局部變量. 內部聲明的 cwd 將屏蔽外部的聲明, 因此上面的代碼併不會更新包級聲明的 cwd 變量.

-

當前的編譯器將檢測到局部聲明的cwd併沒有本使用, 然後報告這可能是一個錯誤, 但是這種檢測併不可靠. 一些小的代碼變更, 例如增加一個局部cwd的打印語句, 就可能導致這種檢測失效.

+

雖然cwd在外部已經聲明過,但是:=語句還是將cwd和err重新聲明爲新的局部變量。因爲內部聲明的cwd將屏蔽外部的聲明,因此上面的代碼併不會正確更新包級聲明的cwd變量。

+

由於當前的編譯器會檢測到局部聲明的cwd併沒有本使用,然後報告這可能是一個錯誤,但是這種檢測併不可靠。因爲一些小的代碼變更,例如增加一個局部cwd的打印語句,就可能導致這種檢測失效。

var cwd string
 
 func init() {
@@ -2121,8 +2125,8 @@ f.Close()
     log.Printf("Working directory = %s", cwd)
 }
 
-

全局的cwd變量依然是沒有被正確初始化的, 而且看似正常的日誌輸齣更是這個BUG更加隱晦.

-

有許多方式可以避免齣現類似潛在的問題. 最直接的是通過單獨聲明err變量, 來避免使用 := 的簡短聲明方式:

+

全局的cwd變量依然是沒有被正確初始化的,而且看似正常的日誌輸出更是讓這個BUG更加隱晦。

+

有許多方式可以避免出現類似潛在的問題。最直接的方法是通過單獨聲明err變量,來避免使用:=的簡短聲明方式:

var cwd string
 
 func init() {
@@ -2133,8 +2137,7 @@ f.Close()
     }
 }
 
-

我們已經看到包, 文件, 聲明和語句如何來表達一個程序結構. 在下面的兩個章節, 我們將探討數據的結構.

-

譯註: 本章的詞法域和作用域概念有些混淆, 需要重譯一遍.

+

我們已經看到包、文件、聲明和語句如何來表達一個程序結構。在下面的兩個章節,我們將探討數據的結構。

@@ -2166,7 +2169,7 @@ f.Close() diff --git a/ch2/ch2.html b/ch2/ch2.html index 7ae13d5..2a891ed 100644 --- a/ch2/ch2.html +++ b/ch2/ch2.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

第2章 程序結構

-

Go語言和任何其他語言一樣, 一個大的程序是有很多小的基礎構件組成的. 變量保存值. 簡單的加法和減法運算被組合成較大的表達式. 基礎類型被聚合爲數組或結構體. 然後使用if和for之類的控製語句來組織和控製表達式的執行順序. 然後多個語句被組織到函數中, 以便代碼的隔離和複用. 函數以源文件和包的方式組織.

-

我們已經在前面的章節的例子中看到了大部分的例子. 在本章中, 我們將深入討論Go程序的基礎結構的一些細節. 每個示例程序都是刻意寫的簡單, 這樣我們可以減少被複雜的算法和數據結構所榦擾, 從而專註於語言本身的學習.

+

Go語言和其他編程語言一樣,一個大的程序是由很多小的基礎構件組成的。變量保存值,簡單的加法和減法運算被組合成較複雜的表達式。基礎類型被聚合爲數組或結構體等更複雜的數據結構。然後使用if和for之類的控製語句來組織和控製表達式的執行流程。然後多個語句被組織到一個個函數中,以便代碼的隔離和複用。函數以源文件和包的方式被組織。

+

我們已經在前面章節的例子中看到了很多例子。在本章中,我們將深入討論Go程序基礎結構方面的一些細節。每個示例程序都是刻意寫的簡單,這樣我們可以減少複雜的算法或數據結構等不相關的問題帶來的榦擾,從而可以專註於Go語言本身的學習。

@@ -2053,7 +2057,7 @@ diff --git a/ch3/ch3-01.html b/ch3/ch3-01.html index fb5ea7f..a4cdf40 100644 --- a/ch3/ch3-01.html +++ b/ch3/ch3-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,50 +2024,50 @@

3.1. 整型

-

Go語言的數值類型包括幾種不同大小的整形數, 浮點數, 和複數. 每種數值類型都決定了對應的大小范圍和是否有正負符號. 讓我們先從整形數類型開始介紹.

-

Go同時提供了有符號和無符號的整數運算. 這里有四種int8, int16, int32 和 int64截然不同大小的有符號整形數類型, 分别對應 8, 16, 32, 64 bit 大小的有符號整形數, 與此對應的是 uint8, uint16, uint32, 和 uint64 四種無符號整形數類型.

-

這里還有兩種對應特定平颱最天然或最有效率的大小有符號和無符號整數int和uint; 其中int是應用最廣泛的數值類型. 這兩種類型都有同樣的大小, 32 或 64 bit, 但是我們不能對此做任何的假設; 因爲不同的編譯器在相同的硬件平颱上可能産生不同的大小.

-

字符rune類型是和int32等價的類型, 通常用於表示一個Unicode碼點. 這兩個名稱可以互換使用. 同樣byte也是uint8類型的等價類型, byte類型用於強調數值是一個原始的數據而不是一個小的整數.

-

最好, 還有一個無符號的整數類型 uintptr, 沒有指定具體的bit大小但是足以容納指針. uintptr 類型隻有在底層編程是纔需要, 特别是Go語言和C函數庫或操作繫統相交互的地方. 我們將在第十三章的 unsafe 包相關部分看到類似的例子.

-

不管它們的大小, int, uint, 和 uintptr 是不同類型大小的兄弟類型. 其中 int 和 int32 也是不同的類型, 卽使int的大小也是32bit, 在需要將int當作int32類型的地方需要一個顯式的類型轉換, 反之亦然.

-

有符號數采用2的補碼形式表示, 也就是最高位用作符號位, 一個nbit的有符號數的值域是 -2^(n-1)(2^(n-1)) - 1. 無符號整數的所有bit位都用於表示非負數, 值域是 0 到 (2^n) - 1. 例如, int8 的值域是 -128 到 127, 而 uint8 的值域是 0 到 255.

-

下面是Go中關於算術, 邏輯和比較的二元運算符按照先級遞減的順序的列表:

+

Go語言的數值類型包括幾種不同大小的整形數、浮點數和複數。每種數值類型都決定了對應的大小范圍和是否支持正負符號。讓我們先從整形數類型開始介紹。

+

Go語言同時提供了有符號和無符號類型的整數運算。這里有int8、int16、int32和int64四種截然不同大小的有符號整形數類型,分别對應8、16、32、64bit大小的有符號整形數,與此對應的是uint8、uint16、uint32和uint64四種無符號整形數類型。

+

這里還有兩種一般對應特定CPU平台機器字大小的有符號和無符號整數int和uint;其中int是應用最廣泛的數值類型。這兩種類型都有同樣的大小,32或64bit,但是我們不能對此做任何的假設;因爲不同的編譯器卽使在相同的硬件平台上可能産生不同的大小。

+

Unicode字符rune類型是和int32等價的類型,通常用於表示一個Unicode碼點。這兩個名稱可以互換使用。同樣byte也是uint8類型的等價類型,byte類型一般用於強調數值是一個原始的數據而不是一個小的整數。

+

最後,還有一種無符號的整數類型uintptr,沒有指定具體的bit大小但是足以容納指針。uintptr類型隻有在底層編程是才需要,特别是Go語言和C語言函數庫或操作繫統接口相交互的地方。我們將在第十三章的unsafe包相關部分看到類似的例子。

+

不管它們的具體大小,int、uint和uintptr是不同類型的兄弟類型。其中int和int32也是不同的類型,卽使int的大小也是32bit,在需要將int當作int32類型的地方需要一個顯式的類型轉換操作,反之亦然。

+

其中有符號整數采用2的補碼形式表示,也就是最高bit位用作表示符號位,一個n-bit的有符號數的值域是從2n1-2^{n-1}2n112^{n-1}-1。無符號整數的所有bit位都用於表示非負數,值域是0到2n12^n-1。例如,int8類型整數的值域是從-128到127,而uint8類型整數的值域是從0到255。

+

下面是Go語言中關於算術運算、邏輯運算和比較運算的二元運算符,它們按照先級遞減的順序的排列:

*      /      %      <<       >>     &       &^
 +      -      |      ^
 ==     !=     <      <=       >      >=
 &&
 ||
-

二元運算符有五種優先級. 在同一優先級, 使用左優先結合律, 使用括號可以明確優先順序, 括號也可以用於提陞優先級, 例如 mask & (1 << 28).

-

對於上表中前兩行的運算符, 例如 + 有一個相應的賦值結合運算符 +=, 可以用於簡化賦值語句.

-

整數的算術運算符 +, -, *, 和 / 可以適用與整數, 浮點數和複數, 但是取模運算符 % 僅用於整數. 不同編程語言間, % 取模運算的行爲併不相同. 在Go語言中, % 取模運算符的符號和被取模數的符號總是一致的, 因此 -5%3-5%-3 結果都是 -2.除法運算符 / 的行爲依賴於操作數是否爲整數, 因此 5.0/4.0 的結果是 1.25, 但是 5/4 的結果是 1, 因此整數除法會向着0方向截斷餘數.

-

如果一個算術運算的結果, 不管是有符號或者是無符號的, 如果需要更多的bit位纔能表示, 就説明是溢齣了. 超齣的高位的bit位部分將被丟棄. 如果原始的數值是有符號類型, 那麽最終結果可能是負的, 如果最左邊的bit爲是1的話, 例如int8的例子:

+

二元運算符有五種優先級。在同一個優先級,使用左優先結合規則,但是使用括號可以明確優先順序,使用括號也可以用於提陞優先級,例如mask & (1 << 28)

+

對於上表中前兩行的運算符,例如+運算符還有一個與賦值相結合的對應運算符+=,可以用於簡化賦值語句。

+

整數的算術運算符+、-、*/可以適用與於整數、浮點數和複數,但是取模運算符%僅用於整數間的運算。對於不同編程語言,%取模運算的行爲可能併不相同。在Go語言中,%取模運算符的符號和被取模數的符號總是一致的,因此-5%3-5%-3結果都是-2。除法運算符/的行爲則依賴於操作數是否爲全爲整數,比如5.0/4.0的結果是1.25,但是5/4的結果是1,因爲整數除法會向着0方向截斷餘數。

+

如果一個算術運算的結果,不管是有符號或者是無符號的,如果需要更多的bit位才能正確表示的話,就説明計算結果是溢出了。超出的高位的bit位部分將被丟棄。如果原始的數值是有符號類型,而且最左邊的bit爲是1的話,那麽最終結果可能是負的,例如int8的例子:

var u uint8 = 255
 fmt.Println(u, u+1, u*u) // "255 0 1"
 
 var i int8 = 127
 fmt.Println(i, i+1, i*i) // "127 -128 1"
 
-

兩個相同的整數類型可以使用下面的二元比較運算符進行比較; 比較表達式的結果是布爾類型.

+

兩個相同的整數類型可以使用下面的二元比較運算符進行比較;比較表達式的結果是布爾類型。

==    equal to
 !=    not equal to
 <     less than
 <=    less than or equal to
 >     greater than
 >=    greater than or equal to
-

事實上, 布爾型, 數字類型 和 字符串 等基本類型都是可比較的, 也就是説兩個相同類型的值可以用 == 和 != 進行比較. 此外, 整數, 浮點數和字符串可以根據比較結果排序. 許多其他類型的值是不可比較, 因此也就是不可排序的. 對於我們遇到的每種類型, 我們需要保證規則是類似的.

-

這里是一元的加法和減法運算符:

+

事實上,布爾型、數字類型和字符串等基本類型都是可比較的,也就是説兩個相同類型的值可以用==和!=進行比較。此外,整數、浮點數和字符串可以根據比較結果排序。許多其它類型的值可能是不可比較的,因此也就可能是不可排序的。對於我們遇到的每種類型,我們需要保證規則的一致性。

+

這里是一元的加法和減法運算符:

+      一元加法 (無效果)
 -      負數
-

對於整數, +x 是 0+x 的簡寫, -x 是 0-x 的簡寫; 對於浮點數和複數, +x 就是 x, -x 則是 x 的負數.

-

Go語言還提供了以下的bit位操作運算符, 前面4個操作運算符併不區分是有符號還是無符號數:

+

對於整數,+x是0+x的簡寫,-x則是0-x的簡寫;對於浮點數和複數,+x就是x,-x則是x 的負數。

+

Go語言還提供了以下的bit位操作運算符,前面4個操作運算符併不區分是有符號還是無符號數:

&      位運算 AND
 |      位運算 OR
 ^      位運算 XOR
 &^     位清空 (AND NOT)
 <<     左移
 >>     右移
-

位操作運算符 ^ 作爲二元運算符時是按位異或(XOR), 當用作一元運算符時表示按位取反; 也就是説, 它返迴一個每個bit位都取反的數. 位操作運算符 &^ 用於按位置零(AND NOT): 表達式 z = x &^ y 結果z的bit位1, 如果對應y中bit位爲1, 否則對應的bit位等於x相應的bit位的值.

-

下面的代碼演示了如何使用位操作解釋uint8類型值的8個獨立的bit位. 它使用了 Printf 函數的 %b 參數打印二進製格式的數字; 其中 %08b 中08表示打印至少8個數字, 不足的前綴用0填充.

+

位操作運算符^作爲二元運算符時是按位異或(XOR),當用作一元運算符時表示按位取反;也就是説,它返迴一個每個bit位都取反的數。位操作運算符&^用於按位置零(AND NOT):表達式z = x &^ y結果z的bit位爲0,如果對應y中bit位爲1的話,否則對應的bit位等於x相應的bit位的值。

+

下面的代碼演示了如何使用位操作解釋uint8類型值的8個獨立的bit位。它使用了Printf函數的%b參數打印二進製格式的數字;其中%08b中08表示打印至少8個字符寬度,不足的前綴部分用0填充。

var x uint8 = 1<<1 | 1<<5
 var y uint8 = 1<<1 | 1<<2
 
@@ -2084,41 +2088,41 @@ fmt.Printf("%08b\n", x&^y) "%08b\n", x<<1) // "01000100", the set {2, 6}
 fmt.Printf("%08b\n", x>>1) // "00010001", the set {0, 4}
 
-

(6.5節給齣了一個可以遠大於一個字節的整數集的實現.)

-

在 x<>n 移位運算中, 決定了移位操作bit數部分必鬚是無符號數; 被操作的 x 數可以是有符號或無符號數. 算術上, 一個 x<>n 右移運算等價於除以 2^n.

-

左移運算用零填充右邊空缺的bit位, 無符號數的右移運算也是用0填充左邊空缺的bit位, 但是有符號數的右移運算會用符號位的值填充左邊空缺的bit位. 因爲這個原因, 最好用無符號運算, 這樣你可以將整數完全當作一個bit位模式處理.

-

盡管Go提供了無符號數和運算, 卽使數值本身不可能齣現負數我們還是傾向於使用有符號的int類型, 就是數組的長度那樣, 雖然使用 uint 似乎是一個更合理的選擇. 事實上, 內置的 len 函數返迴一個有符號的int, 我們可以像下面這個逆序循環那樣處理.

+

(6.5節給出了一個可以遠大於一個字節的整數集的實現。)

+

x<<nx>>n移位運算中,決定了移位操作bit數部分必鬚是無符號數;被操作的x數可以是有符號或無符號數。算術上,一個x<<n左移運算等價於乘以2n2^n,一個x>>n右移運算等價於除以2n2^n

+

左移運算用零填充右邊空缺的bit位,無符號數的右移運算也是用0填充左邊空缺的bit位,但是有符號數的右移運算會用符號位的值填充左邊空缺的bit位。因爲這個原因,最好用無符號運算,這樣你可以將整數完全當作一個bit位模式處理。

+

盡管Go語言提供了無符號數和運算,卽使數值本身不可能出現負數我們還是傾向於使用有符號的int類型,就像數組的長度那樣,雖然使用uint無符號類型似乎是一個更合理的選擇。事實上,內置的len函數返迴一個有符號的int,我們可以像下面例子那樣處理逆序循環。

medals := []string{"gold", "silver", "bronze"}
 for i := len(medals) - 1; i >= 0; i-- {
     fmt.Println(medals[i]) // "bronze", "silver", "gold"
 }
 
-

另一個選擇將是災難性的. 如果 len 返迴一個無符號數, 那麽 i 也將是無符號的 uint, 然後條件 i >= 0 則永遠爲眞. 在三次迭代之後, 也就是 i == 0 時, i-- 語句將不會産生 -1, 而是變成一個uint的最大值(可能是 2^64 - 1), 然後 medals[i] 表達式將發生運行時 panic 異常(§5.9), 也就是試圖訪問一個切片范圍以外的元素.

-

齣於這個原因, 無符號數往往隻有在位運算或其它特殊的運算常見纔會使用, 就像 bit 集合, 分形二進製文件格式, 或者是哈希和加密操作等. 它們通常併不用於僅僅是表達非負數量的場合.

-

一般來説, 需要一個顯式的轉換將一個值從一種類型轉化位另一種類型, 併且算術和邏輯運算的二元操作中必鬚是相同的類型. 雖然這偶爾會導致很長的表達式, 但是它消除了所有的類型相關的問題, 也使得程序容易理解.

-

從其他類似場景下, 考慮下面這個代碼:

+

另一個選擇對於上面的例子來説將是災難性的。如果len函數返迴一個無符號數,那麽i也將是無符號的uint類型,然後條件i >= 0則永遠爲眞。在三次迭代之後,也就是i == 0時,i--語句將不會産生-1,而是變成一個uint類型的最大值(可能是26412^64-1),然後medals[i]表達式將發生運行時panic異常(§5.9),也就是試圖訪問一個slice范圍以外的元素。

+

出於這個原因,無符號數往往隻有在位運算或其它特殊的運算場景才會使用,就像bit集合、分析二進製文件格式或者是哈希和加密操作等。它們通常併不用於僅僅是表達非負數量的場合。

+

一般來説,需要一個顯式的轉換將一個值從一種類型轉化位另一種類型,併且算術和邏輯運算的二元操作中必鬚是相同的類型。雖然這偶爾會導致需要很長的表達式,但是它消除了所有和類型相關的問題,而且也使得程序容易理解。

+

在很多場景,會遇到類似下面的代碼通用的錯誤:

var apples int32 = 1
 var oranges int16 = 2
 var compote int = apples + oranges // compile error
 
-

當嚐試編譯這三個語句時, 將産生一個錯誤信息:

+

當嚐試編譯這三個語句時,將産生一個錯誤信息:

invalid operation: apples + oranges (mismatched types int32 and int16)
-

這種類型不匹配的問題可以有幾種不同的方法脩複, 最常見方法是將它們都顯式轉型位一個常見類型:

+

這種類型不匹配的問題可以有幾種不同的方法脩複,最常見方法是將它們都顯式轉型爲一個常見類型:

var compote = int(apples) + int(oranges)
 
-

如2.5節所述, 對於每種類型T, 類型轉換操作T(x)將x轉換位T類型, 如果轉換允許的話. 許多 整形數之間的相互轉換併不會改變數值; 它們隻是告訴編譯器如何解釋這個值. 但是對於將一個大尺寸的整數類型轉位一個小尺寸的整數類型, 或者是將一個浮點數轉位整數, 可能會改變數值或丟失精度:

+

如2.5節所述,對於每種類型T,如果轉換允許的話,類型轉換操作T(x)將x轉換爲T類型。許多整形數之間的相互轉換併不會改變數值;它們隻是告訴編譯器如何解釋這個值。但是對於將一個大尺寸的整數類型轉爲一個小尺寸的整數類型,或者是將一個浮點數轉爲整數,可能會改變數值或丟失精度:

f := 3.141 // a float64
 i := int(f)
 fmt.Println(f, i) // "3.141 3"
 f = 1.99
 fmt.Println(int(f)) // "1"
 
-

浮點數到整數的轉換將丟失任何小數部分, 向數軸零方向截斷. 你應該避免操作目標類型表示范圍的數值類型轉換, 因爲截斷的行爲依賴於具體的實現:

+

浮點數到整數的轉換將丟失任何小數部分,然後向數軸零方向截斷。你應該避免對可能會超出目標類型表示范圍的數值類型轉換,因爲截斷的行爲可能依賴於具體的實現:

f := 1e100  // a float64
 i := int(f) // 結果依賴於具體實現
 
-

任何大小的整數字面值都可以用以0開始的八進製格式書寫, 例如 0666, 或用以0x或0X開頭的十六進製格式書寫, 例如 0xdeadbeef. 十六進製數字可以用大寫或小寫字母. 如今八進製數據通常用於POSIX操作繫統上的文件訪問權限標誌, 十六進製數字則更強調數字值的bit位模式.

-

當使用 fmt 包打印一個數值時, 我們可以用 %d, %o, 或 %x 控製輸齣的進製格式, 就像下面的例子:

+

任何大小的整數字面值都可以用以0開始的八進製格式書寫,例如0666;或用以0x或0X開頭的十六進製格式書寫,例如0xdeadbeef。十六進製數字可以用大寫或小寫字母。如今八進製數據通常用於POSIX操作繫統上的文件訪問權限標誌,十六進製數字則更強調數字值的bit位模式。

+

當使用fmt包打印一個數值時,我們可以用%d、%o或%x參數控製輸出的進製格式,就像下面的例子:

o := 0666
 fmt.Printf("%d %[1]o %#[1]o\n", o) // "438 666 0666"
 x := int64(0xdeadbeef)
@@ -2126,14 +2130,14 @@ fmt.Printf("%d %[1]x %#[1]x %#[1]X\n"
 // Output:
 // 3735928559 deadbeef 0xdeadbeef 0XDEADBEEF
 
-

請註意 fmt 的兩個使用技巧. 通常 Printf 格式化字符串包含多個 % 參數時將對應相同數量的額外操作數, 但是 % 之後的 [1] 副詞告訴Printf函數再次使用第一個操作數. 第二, % 後的 # 副詞告訴 Printf 在用 %o, %x 或 %X 輸齣時生成 0, 0x 或 0X前綴.

-

字符面值通過一對單引號直接包含對應字符. 最簡單的例子是 ASCII 中類似 'a' 字符面值, 但是我們可以通過轉義的數值來表示任意的Unicode碼點對應的字符, 馬上將會看到例子.

-

字符使用 %c 參數打印, 或者是 %q 參數打印帶單引號的字符:

+

請註意fmt的兩個使用技巧。通常Printf格式化字符串包含多個%參數時將會包含對應相同數量的額外操作數,但是%之後的[1]副詞告訴Printf函數再次使用第一個操作數。第二,%後的#副詞告訴Printf在用%o、%x或%X輸出時生成0、0x或0X前綴。

+

字符面值通過一對單引號直接包含對應字符。最簡單的例子是ASCII中類似'a'寫法的字符面值,但是我們也可以通過轉義的數值來表示任意的Unicode碼點對應的字符,馬上將會看到這樣的例子。

+

字符使用%c參數打印,或者是用%q參數打印帶單引號的字符:

ascii := 'a'
-unicode := '國'
+unicode := '国'
 newline := '\n'
 fmt.Printf("%d %[1]c %[1]q\n", ascii)   // "97 a 'a'"
-fmt.Printf("%d %[1]c %[1]q\n", unicode) // "22269 國 '國'"
+fmt.Printf("%d %[1]c %[1]q\n", unicode) // "22269 国 '国'"
 fmt.Printf("%d %[1]q\n", newline)       // "10 '\n'"
 
@@ -2167,7 +2171,7 @@ fmt.Printf("%d %[1]q\n", newline) diff --git a/ch3/ch3-02.html b/ch3/ch3-02.html index bfc80e4..78bcd42 100644 --- a/ch3/ch3-02.html +++ b/ch3/ch3-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,25 +2024,25 @@

3.2. 浮點數

-

Go語言提供了兩種精度的浮點數, float32 和 float64. 它們的算術規范由 IEEE754 國際標準定義, 該浮點數規范被所有現代的CPU支持.

-

這些數值類型的范圍可以從很微小到很鉅大. 浮點數的范圍極限值可以在 matn 包找到. 常量 math.MaxFloat32 表示 float32 能表示的最大數值, 大約是 3.4e38, 對應的 math.MaxFloat64 常量大約是 1.8e308. 它們能表示的最小值近似分别是1.4e-45 和 4.9e-324.

-

一個 float32 類型的浮點數可以提供大約6個十進製數的精度, 而 float64 則可以提供約 15個十進製數精度; 通常應該優先使用 float64 類型, 因爲 float32 類型的纍計計算誤差很容易擴散, 併且 float32 能精度表示的正整數併不是很大:

+

Go語言提供了兩種精度的浮點數,float32和float64。它們的算術規范由IEEE754浮點數国際標準定義,該浮點數規范被所有現代的CPU支持。

+

這些浮點數類型的取值范圍可以從很微小到很鉅大。浮點數的范圍極限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大數值,大約是 3.4e38;對應的math.MaxFloat64常量大約是1.8e308。它們分别能表示的最小值近似爲1.4e-45和4.9e-324。

+

一個float32類型的浮點數可以提供大約6個十進製數的精度,而float64則可以提供約15個十進製數的精度;通常應該優先使用float64類型,因爲float32類型的纍計計算誤差很容易擴散,併且float32能精確表示的正整數併不是很大(譯註:因爲float32的有效bit位隻有23個,其它的bit位用於指數和符號;當整數大於23bit能表達的范圍時,float32的表示將出現誤差):

var f float32 = 16777216 // 1 << 24
 fmt.Println(f == f+1)    // "true"!
 
-

浮點數的字面值可以直接寫小數部分, 想這樣:

+

浮點數的字面值可以直接寫小數部分,像這樣:

const e = 2.71828 // (approximately)
 
-

小數點前面或後面的數字都可能被省略(例如 .707 或 1.). 很小或很大的數最好用科學計數法書寫, 通過e或E來指定指數部分:

-
const Avogadro = 6.02214129e23 
-const Planck   = 6.62606957e-34
+

小數點前面或後面的數字都可能被省略(例如.707或1.)。很小或很大的數最好用科學計數法書寫,通過e或E來指定指數部分:

+
const Avogadro = 6.02214129e23  // 阿伏伽德羅常數
+const Planck   = 6.62606957e-34 // 普朗剋常數
 
-

用 Printf 函數的 %g 參數打印浮點數, 將采用緊湊的表示形式打印, 併提供足夠的精度, 但是對應表格的數據, 使用 %e (帶指數) 或 %f 的形式打印可能更合適. 所有的這三個打印形式都可以指定打印的寬度和控製打印精度.

+

用Printf函數的%g參數打印浮點數,將采用更緊湊的表示形式打印,併提供足夠的精度,但是對應表格的數據,使用%e(帶指數)或%f的形式打印可能更合適。所有的這三個打印形式都可以指定打印的寬度和控製打印精度。

for x := 0; x < 8; x++ {
     fmt.Printf("x = %d e^x = %8.3f\n", x, math.Exp(float64(x)))
 }
 
-

上面代碼打印e的冪, 打印精度是小數點後三個小數精度和8個字符寬度:

+

上面代碼打印e的冪,打印精度是小數點後三個小數精度和8個字符寬度:

x = 0       e^x =    1.000
 x = 1       e^x =    2.718
 x = 2       e^x =    7.389
@@ -2047,15 +2051,15 @@ x = 4       e^x =   54.598
 x = 5       e^x =  148.413
 x = 6       e^x =  403.429
 x = 7       e^x = 1096.633
-

math 包中除了提供大量常用的數學函數外, 還提供了IEEE754標準中特殊數值的創建和測試: 正無窮大和負無窮大, 分别用於表示太大溢齣的數字和除零的結果; 還有 NaN 非數, 一般用於表示無效的除法操作結果 0/0 或 Sqrt(-1).

+

math包中除了提供大量常用的數學函數外,還提供了IEEE754浮點數標準中定義的特殊值的創建和測試:正無窮大和負無窮大,分别用於表示太大溢出的數字和除零的結果;還有NaN非數,一般用於表示無效的除法操作結果0/0或Sqrt(-1).

var z float64
 fmt.Println(z, -z, 1/z, -1/z, z/z) // "0 -0 +Inf -Inf NaN"
 
-

函數 math.IsNaN 用於測試一個數是否是非數 NaN, math.NaN 則返迴非數對應的值. 雖然可以用 math.NaN 來表示一個非法的結果, 但是測試一個結果是否是非數 NaN 則是充滿風險, 因爲 NaN 和任何數都是不相等的:

+

函數math.IsNaN用於測試一個數是否是非數NaN,math.NaN則返迴非數對應的值。雖然可以用math.NaN來表示一個非法的結果,但是測試一個結果是否是非數NaN則是充滿風險的,因爲NaN和任何數都是不相等的(譯註:在浮點數中,NaN、正無窮大和負無窮大都不是唯一的,每個都有非常多種的bit模式表示):

nan := math.NaN()
 fmt.Println(nan == nan, nan < nan, nan > nan) // "false false false"
 
-

如果一個函數返迴的浮點數結果可能失敗, 最好的做法是用單獨的標誌報告失敗, 像這樣:

+

如果一個函數返迴的浮點數結果可能失敗,最好的做法是用單獨的標誌報告失敗,像這樣:

func compute() (value float64, ok bool) {
     // ...
     if failed {
@@ -2064,7 +2068,7 @@ fmt.Println(nan == nan, nan < nan, nan > nan) /
     return result, true
 }
 
-

接下來的程序演示了浮點計算圖形. 它是帶有兩個參數的 z = f(x, y) 函數的三維形式, 使用了可縮放矢量圖形(SVG)格式輸齣, 一個用於矢量線繪製的XML標準. 圖3.1顯示了 sin(r)/r 函數的輸齣圖形, 其中 r 是 sqrt(xx+yy).

+

接下來的程序演示了通過浮點計算生成的圖形。它是帶有兩個參數的z = f(x, y)函數的三維形式,使用了可縮放矢量圖形(SVG)格式輸出,SVG是一個用於矢量線繪製的XML標準。圖3.1顯示了sin(r)/r函數的輸出圖形,其中r是sqrt(xx+yy)。

gopl.io/ch3/surface
 // Surface computes an SVG rendering of a 3-D surface function.
@@ -2122,20 +2126,20 @@ fmt.Println(nan == nan, nan < nan, nan > nan) /
     return math.Sin(r) / r
 }
 
-

要註意的是 corner 返迴了兩個結果, 對應 corner 的坐標參數.

-

要解釋程序是如何工作的需要了解基本的幾何知識, 但是我們可以跳過幾何原理, 因爲程序的重點是演示浮點運算. 程序的本質是三個不同的坐標繫中映射關繫, 如圖3.2所示. 第一個是 100x100 的二維網格, 對應整數整數坐標(i,j), 從遠處的 (0, 0) 位置開始. 我們從遠處像前面繪製, 因此遠處先繪製的多邊形有可能被前面後繪製的多邊形覆蓋.

-

第二個坐標繫是一個三維的網格浮點坐標(x,y,z), 其中x和y是i和j的線性函數, 通過平移轉換位center的中心, 然後用xyrange繫數縮放. 高度z是函數f(x,y)的值.

-

第三個坐標繫是一個二維的畵布, 起點(0,0)在左上角. 畵布中點的坐標用(sx, sy)表示. 我們使用等角投影將三維點

+

要註意的是corner函數返迴了兩個結果,分别對應每個網格頂點的坐標參數。

+

要解釋這個程序是如何工作的需要一些基本的幾何學知識,但是我們可以跳過幾何學原理,因爲程序的重點是演示浮點數運算。程序的本質是三個不同的坐標繫中映射關繫,如圖3.2所示。第一個是100x100的二維網格,對應整數整數坐標(i,j),從遠處的(0, 0)位置開始。我們從遠處向前面繪製,因此遠處先繪製的多邊形有可能被前面後繪製的多邊形覆蓋。

+

第二個坐標繫是一個三維的網格浮點坐標(x,y,z),其中x和y是i和j的線性函數,通過平移轉換位網格單元的中心,然後用xyrange繫數縮放。高度z是函數f(x,y)的值。

+

第三個坐標繫是一個二維的畵布,起點(0,0)在左上角。畵布中點的坐標用(sx, sy)表示。我們使用等角投影將三維點

-

(x,y,z) 投影到二維的畵布中. 畵布中從遠處到右邊的點對應較大的x值和較大的y值. 併且畵布中x和y值越大, 則對應的z值越小. x和y的垂直和水平縮放繫數來自30度角的正絃和餘絃值. z的縮放繫數0.4, 是一個任意選擇的參數.

-

對於二維網格中的每一個單位, main函數計算單元的四個頂點在畵布中對應多邊形ABCD的頂點, 其中B對應(i,j)頂點位置, A, C, 和 D是相鄰的頂點, 然後輸齣SVG的繪製指令.

-

練習3.1: 如果 f 函數返迴的是無限製的 float64 值, 那麽SVG文件可能輸齣無效的多邊形元素(雖然許多SVG渲染器會妥善處理這類問題). 脩改程序跳過無效的多邊形.

-

練習3.2: 試驗math包中其他函數的渲染圖形. 你是否能輸齣一個egg box, moguls, 或 a saddle 圖案?

-

練習3.3:根據高度給每個多邊形上色, 那樣峯值部將是紅色(#ff0000), 谷部將是藍色(#0000ff).

-

3.4: 參考1.7節Lissajous例子的函數, 構造一個web服務器, 用於計算函數麴面然後返迴SVG數據給客戶端. 服務器必鬚設置 Content-Type 頭部:

+

(x,y,z)投影到二維的畵布中。畵布中從遠處到右邊的點對應較大的x值和較大的y值。併且畵布中x和y值越大,則對應的z值越小。x和y的垂直和水平縮放繫數來自30度角的正絃和餘絃值。z的縮放繫數0.4,是一個任意選擇的參數。

+

對於二維網格中的每一個網格單元,main函數計算單元的四個頂點在畵布中對應多邊形ABCD的頂點,其中B對應(i,j)頂點位置,A、C和D是其它相鄰的頂點,然後輸出SVG的繪製指令。

+

練習 3.1: 如果f函數返迴的是無限製的float64值,那麽SVG文件可能輸出無效的多邊形元素(雖然許多SVG渲染器會妥善處理這類問題)。脩改程序跳過無效的多邊形。

+

練習 3.2: 試驗math包中其他函數的渲染圖形。你是否能輸出一個egg box、moguls或a saddle圖案?

+

練習 3.3: 根據高度給每個多邊形上色,那樣峯值部將是紅色(#ff0000),谷部將是藍色(#0000ff)。

+

練習 3.4: 參考1.7節Lissajous例子的函數,構造一個web服務器,用於計算函數麴面然後返迴SVG數據給客戶端。服務器必鬚設置Content-Type頭部:

w.Header().Set("Content-Type", "image/svg+xml")
 
-

(這一步在Lissajous例子中不是必鬚的, 因爲服務器使用標準的PNG圖像格式, 可以根據前面的512個字節自動輸齣對應的頭部.) 允許客戶端通過HTTP請求參數設置高度, 寬度, 和顔色等參數.

+

(這一步在Lissajous例子中不是必鬚的,因爲服務器使用標準的PNG圖像格式,可以根據前面的512個字節自動輸出對應的頭部。)允許客戶端通過HTTP請求參數設置高度、寬度和顔色等參數。

@@ -2167,7 +2171,7 @@ fmt.Println(nan == nan, nan < nan, nan > nan) / diff --git a/ch3/ch3-03.html b/ch3/ch3-03.html index 7313f13..5d4c303 100644 --- a/ch3/ch3-03.html +++ b/ch3/ch3-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,25 +2024,25 @@

3.3. 複數

-

Go提供了兩種精度的複數類似, complex64 和 complex128, 分别對應 float32 和 float64精度. 內置的 complex 函數用於構建複數, 內建的 real 和 imag 函數返迴複數的實部和虛部:

+

Go語言提供了兩種精度的複數類型:complex64和complex128,分别對應float32和float64兩種浮點數精度。內置的complex函數用於構建複數,內建的real和imag函數分别返迴複數的實部和虛部:

var x complex128 = complex(1, 2) // 1+2i
 var y complex128 = complex(3, 4) // 3+4i
 fmt.Println(x*y)                 // "(-5+10i)"
 fmt.Println(real(x*y))           // "-5"
 fmt.Println(imag(x*y))           // "10"
 
-

如果一個浮點數面值或一個十進製整數面值後面跟着一個i, 例如 3.141592i 或 2i, 它將構成一個複數的虛部, 複數的實部是0:

+

如果一個浮點數面值或一個十進製整數面值後面跟着一個i,例如3.141592i或2i,它將構成一個複數的虛部,複數的實部是0:

fmt.Println(1i * 1i) // "(-1+0i)", i^2 = -1
 
-

在常量算術規則下, 一個複數常量可以加到另一個常量(整數或浮點數, 實部或虛部), 我們可以用自然的方式寫複數, 就像 1+2i, 或與之等價的寫法 2i+1. 上面x和y的聲明語句還可以簡化:

+

在常量算術規則下,一個複數常量可以加到另一個普通數值常量(整數或浮點數、實部或虛部),我們可以用自然的方式書寫複數,就像1+2i或與之等價的寫法2i+1。上面x和y的聲明語句還可以簡化:

x := 1 + 2i
 y := 3 + 4i
 
-

複數也可以用 == 和 != 進行相等比較. 隻有兩個複數的實部和虛部都相等的時候它們纔是相等的.

-

math/cmplx 包提供了複數處理的許多函數, 例如求複數的平方根函數和求冪函數.

+

複數也可以用==和!=進行相等比較。隻有兩個複數的實部和虛部都相等的時候它們才是相等的(譯註:浮點數的相等比較是危險的,需要特别小心處理精度問題)。

+

math/cmplx包提供了複數處理的許多函數,例如求複數的平方根函數和求冪函數。

fmt.Println(cmplx.Sqrt(-1)) // "(0+1i)"
 
-

下面的程序使用complex128複數算法來生成一個Mandelbrot圖像.

+

下面的程序使用complex128複數算法來生成一個Mandelbrot圖像。

gopl.io/ch3/mandelbrot
 
 // Mandelbrot emits a PNG image of the Mandelbrot fractal.
@@ -2086,13 +2090,13 @@ y := 3 + 4i
     return color.Black
 }
 
-

遍歷1024x1024圖像每個點的兩個嵌套的循環對應 -2 到 +2 區間的複數平面. 程序反複測試每個點對應複數值平方值加一個增量值對應的點是否超齣半徑爲2的圓. 如果超過了, 通過根據逃逸的迭代次數對應的灰度顔色來代替. 如果不是, 該點屬於Mandelbrot集合, 使用黑色顔色標記. 最終程序將生成的PNG格式分形圖像圖像輸齣到標準輸齣, 如圖3.3所示.

-

練習3.5: 實現一個綵色的Mandelbrot圖像, 使用 image.NewRGBA 創建圖像, 使用 color.RGBA 或 color.YCbCr 生成顔色.

-

練習3.6: 超采樣技術可以降低每個像素對計算顔色值和平均值的影響. 簡單的方法是將每個像素分層四個子像素, 實現它.

-

練習3.7: 另一個生成分形圖像的方式是使用牛頓法來求解一個複數方程, 例如 z^4 − 1 = 0. 每個起點到四個根的迭代次數對應陰影的灰度. 方程根對應的點用顔色表示.

+

用於遍歷1024x1024圖像每個點的兩個嵌套的循環對應-2到+2區間的複數平面。程序反複測試每個點對應複數值平方值加一個增量值對應的點是否超出半徑爲2的圓。如果超過了,通過根據預設置的逃逸迭代次數對應的灰度顔色來代替。如果不是,那麽該點屬於Mandelbrot集合,使用黑色顔色標記。最終程序將生成的PNG格式分形圖像圖像輸出到標準輸出,如圖3.3所示。

-

練習3.8: 通過提高精度來生成更多級别的分形. 使用四種不同精度類型的數字實現相同的分形: complex64, complex128, big.Float, and big.Rat. (後面兩種類型在 math/big 包聲明. Float是有指定限精度的浮點數; Rat是無效精度的有理數.) 它們間的性能和內存使用對比如何? 當渲染圖可見時縮放的級别是多少?

-

練習3.9: 編寫一個web服務器, 用於給客戶端生成分形的圖像. 運行客戶端用過HTTP參數參數指定x,y和zoom參數.

+

練習 3.5: 實現一個綵色的Mandelbrot圖像,使用image.NewRGBA創建圖像,使用color.RGBA或color.YCbCr生成顔色。

+

練習 3.6: 陞采樣技術可以降低每個像素對計算顔色值和平均值的影響。簡單的方法是將每個像素分層四個子像素,實現它。

+

練習 3.7: 另一個生成分形圖像的方式是使用牛頓法來求解一個複數方程,例如z41=0z^4-1=0。每個起點到四個根的迭代次數對應陰影的灰度。方程根對應的點用顔色表示。

+

練習 3.8: 通過提高精度來生成更多級别的分形。使用四種不同精度類型的數字實現相同的分形:complex64、complex128、big.Float和big.Rat。(後面兩種類型在math/big包聲明。Float是有指定限精度的浮點數;Rat是無效精度的有理數。)它們間的性能和內存使用對比如何?當渲染圖可見時縮放的級别是多少?

+

練習 3.9: 編寫一個web服務器,用於給客戶端生成分形的圖像。運行客戶端用過HTTP參數參數指定x,y和zoom參數。

@@ -2124,7 +2128,7 @@ y := 3 + 4i diff --git a/ch3/ch3-04.html b/ch3/ch3-04.html index baf156c..5b3f0c0 100644 --- a/ch3/ch3-04.html +++ b/ch3/ch3-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,19 +2024,19 @@

3.4. 布爾型

-

一個布爾類型的值隻有兩種 true 和 false. if 和 for 語句的條件部分都是布爾類型的值, 併且 == 和 < 等比較操作也會産生布爾型的值. 一元操作符 ! 對應邏輯非操作, 因此 !true 的值爲 false, 也可以説是 (!true==false)==true, 雖然表達方式不一樣, 不過我們一般會采用簡潔的布爾表達式, 就像用 x 來表示 x==true.

-

布爾值可以和 && (AND) 和 || (OR) 操作符結合, 併且可能會有短路行爲: 如果運算符左邊值已經可以確定整個布爾表達式的值, 那麽運算符右邊的值將不在被評估, 因此下面的表達式總是安全的:

+

一個布爾類型的值隻有兩種:true和false。if和for語句的條件部分都是布爾類型的值,併且==和<等比較操作也會産生布爾型的值。一元操作符!對應邏輯非操作,因此!true的值爲false,更羅嗦的説法是(!true==false)==true,雖然表達方式不一樣,不過我們一般會采用簡潔的布爾表達式,就像用x來表示x==true

+

布爾值可以和&&(AND)和||(OR)操作符結合,併且可能會有短路行爲:如果運算符左邊值已經可以確定整個布爾表達式的值,那麽運算符右邊的值將不在被求值,因此下面的表達式總是安全的:

s != "" && s[0] == 'x'
 
-

其中 s[0] 應用於空字符串會導致 panic 異常.

-

因爲 && 的優先級比 || 高 (助記: && 對應邏輯乘法, || 對應邏輯加法, 乘法比加法優先級要高), 下面形式的布爾表達式是不需要加小括弧的:

+

其中s[0]操作如果應用於空字符串將會導致panic異常。

+

因爲&&的優先級比||高(助記:&&對應邏輯乘法,||對應邏輯加法,乘法比加法優先級要高),下面形式的布爾表達式是不需要加小括弧的:

if 'a' <= c && c <= 'z' ||
     'A' <= c && c <= 'Z' ||
     '0' <= c && c <= '9' {
     // ...ASCII letter or digit...
 }
 
-

布爾值併不會隱式轉換爲數字值0或1, 反之亦然. 必鬚使用一個顯式的if語句輔助轉換:

+

布爾值併不會隱式轉換爲數字值0或1,反之亦然。必鬚使用一個顯式的if語句輔助轉換:

i := 0
 if b {
     i = 1
@@ -2082,7 +2086,7 @@
 
 
diff --git a/ch3/ch3-05.html b/ch3/ch3-05.html
index f1c4d27..0250ccb 100644
--- a/ch3/ch3-05.html
+++ b/ch3/ch3-05.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,48 +2024,48 @@

3.5. 字符串

-

一個字符串是一個不可改變的字節序列. 字符串可以包含任意的數據, 包括字節值0, 但是通常包含人類可讀的文本. 文本字符串通常被解釋爲采用UTF8編碼的Unicode碼點(rune)序列, 我們稍後會詳細討論這個問題.

-

內置的 len 函數可以返迴一個字符串的字節數目(不是rune字符數目), 索引操作 s[i] 返迴第i個字節的字節值, i 必鬚滿足 0 ≤ i< len(s) 條件約束.

+

一個字符串是一個不可改變的字節序列。字符串可以包含任意的數據,包括byte值0,但是通常是用來包含人類可讀的文本。文本字符串通常被解釋爲采用UTF8編碼的Unicode碼點(rune)序列,我們稍後會詳細討論這個問題。

+

內置的len函數可以返迴一個字符串中的字節數目(不是rune字符數目),索引操作s[i]返迴第i個字節的字節值,i必鬚滿足0 ≤ i< len(s)條件約束。

s := "hello, world"
 fmt.Println(len(s))     // "12"
 fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
 
-

如果視圖訪問超齣字符串范圍的字節將會導致panic異常:

+

如果試圖訪問超出字符串索引范圍的字節將會導致panic異常:

c := s[len(s)] // panic: index out of range
 
-

第i個字節併不一定是字符串的第i個字符, 因此對於非ASCII字符的UTF8編碼會要兩個或多個字節. 我們簡單説下字符的工作方式.

-

子字符串操作s[i:j]基於原始的s字符串的第i個字節開始到第j個字節(併不包含j本身)生成一個新字符串. 生成的子字符串將包含 j-i 個字節.

+

第i個字節併不一定是字符串的第i個字符,因爲對於非ASCII字符的UTF8編碼會要兩個或多個字節。我們先簡單説下字符的工作方式。

+

子字符串操作s[i:j]基於原始的s字符串的第i個字節開始到第j個字節(併不包含j本身)生成一個新字符串。生成的新字符串將包含j-i個字節。

fmt.Println(s[0:5]) // "hello"
 
-

同樣, 如果索引超齣字符串范圍或者j小於i的話將導致panic異常.

-

不管i還是j都可能被忽略, 當它們被忽略時將采用0作爲開始位置, 采用 len(s) 作爲接受的位置.

+

同樣,如果索引超出字符串范圍或者j小於i的話將導致panic異常。

+

不管i還是j都可能被忽略,當它們被忽略時將采用0作爲開始位置,采用len(s)作爲結束的位置。

fmt.Println(s[:5]) // "hello"
 fmt.Println(s[7:]) // "world"
 fmt.Println(s[:])  // "hello, world"
 
-

其中 + 操作符將兩個字符串鏈接構造一個新字符串:

+

其中+操作符將兩個字符串鏈接構造一個新字符串:

fmt.Println("goodbye" + s[5:]) // "goodbye, world"
 
-

字符串可以用 == 和 < 進行比較; 比較通過逐個字節比較完成的, 因此比較的結果是字符串自然編碼的順序.

-

字符串的值是不可變的: 一個字符串包含的字節序列永遠不會被改變, 當然我們也可以給一個字符串變量分配一個新字符串值. 可以像下面這樣將一個字符串追加到另一個字符串

+

字符串可以用==和<進行比較;比較通過逐個字節比較完成的,因此比較的結果是字符串自然編碼的順序。

+

字符串的值是不可變的:一個字符串包含的字節序列永遠不會被改變,當然我們也可以給一個字符串變量分配一個新字符串值。可以像下面這樣將一個字符串追加到另一個字符串:

s := "left foot"
 t := s
 s += ", right foot"
 
-

這併不會導致原始的字符串值被改變, 但是 s 將因爲 += 語句持有一個新的字符串值, 但是 t 依然是包含原先的字符串值.

+

這併不會導致原始的字符串值被改變,但是變量s將因爲+=語句持有一個新的字符串值,但是t依然是包含原先的字符串值。

fmt.Println(s) // "left foot, right foot"
 fmt.Println(t) // "left foot"
 
-

因爲字符串是不可脩改的, 因此嚐試脩改字符串內部數據的操作是被禁止的:

+

因爲字符串是不可脩改的,因此嚐試脩改字符串內部數據的操作也是被禁止的:

s[0] = 'L' // compile error: cannot assign to s[0]
 
-

不變性意味如果兩個字符串共享相同的底層數據是安全的, 這使得複製任何長度的字符串代價是低廉的. 同樣, 一個字符串 s 和對應的子字符串 s[7:] 也可以安全地共享相同的內存, 因此字符串切片操作代價也是低廉的. 在這兩種情況下都沒有必要分配新的內存. 圖3.4 演示了一個字符串和兩個字串共享相同的底層數據.

+

不變性意味如果兩個字符串共享相同的底層數據的話也是安全的,這使得複製任何長度的字符串代價是低廉的。同樣,一個字符串s和對應的子字符串切片s[7:]的操作也可以安全地共享相同的內存,因此字符串切片操作代價也是低廉的。在這兩種情況下都沒有必要分配新的內存。 圖3.4演示了一個字符串和兩個字串共享相同的底層數據。

3.5.1. 字符串面值

-

字符串值也可以用字符串面值方式編寫, 隻要將一繫列字節序列包含在雙引號卽可:

+

字符串值也可以用字符串面值方式編寫,隻要將一繫列字節序列包含在雙引號卽可:

"Hello, 世界"
 

-

因爲Go語言源文件總是用UTF8編碼, 併且Go的文本字符串也以UTF8編碼的方式處理, 我們可以將Unicode碼點也寫到字符串面值中.

-

在一個雙引號包含的字符串面值中, 可以用以反斜槓\開頭的轉義序列插入任意的數據. 下面換行, 迴車和 製表符等常見的ASCII控製代碼的轉義方式:

+

因爲Go語言源文件總是用UTF8編碼,併且Go語言的文本字符串也以UTF8編碼的方式處理,因此我們可以將Unicode碼點也寫到字符串面值中。

+

在一個雙引號包含的字符串面值中,可以用以反斜槓\開頭的轉義序列插入任意的數據。下面的換行、迴車和製表符等是常見的ASCII控製代碼的轉義方式:

\a      響鈴
 \b      退格
 \f      換頁
@@ -2072,9 +2076,9 @@ fmt.Println(t) // "left foot"
 \'      單引號 (隻用在 '\'' 形式的rune符號面值中)
 \"      雙引號 (隻用在 "..." 形式的字符串面值中)
 \\      反斜槓
-

可以通過十六進製或八進製轉義在字符串面值包含任意的字節. 一個十六進製的轉義是 \xhh, 其中兩個h表示十六進製數字(大寫或小寫都可以). 一個八進製轉義是 \ooo, 包含三個八進製的o數字(0到7), 但是不能超過\377. 每一個單一的字節表達一個特定的值. 稍後我們將看到如何將一個Unicode碼點寫到字符串面值中.

-

一個原生的字符串面值形式是 ..., 使用反引號 ``` 代替雙引號. 在原生的字符串面值中, 沒有轉義操作; 全部的內容都是字面的意思, 包含退格和換行, 因此一個程序中的原生字符串面值可能跨越多行. 唯一的特殊處理是是刪除迴車以保證在所有平颱上的值都是一樣的, 包括那些把迴車也放入文本文件的繫統.

-

原生字符串面值用於編寫正則表達式會很方便, 因爲正則表達式往往會包含很多反斜槓. 原生字符串面值同時廣泛應用於HTML模闆, JSON面值, 命令行提示信息, 以及那些需要擴展到多行的場景.

+

可以通過十六進製或八進製轉義在字符串面值包含任意的字節。一個十六進製的轉義形式是\xhh,其中兩個h表示十六進製數字(大寫或小寫都可以)。一個八進製轉義形式是\ooo,包含三個八進製的o數字(0到7),但是不能超過\377(譯註:對應一個字節的范圍,十進製爲255)。每一個單一的字節表達一個特定的值。稍後我們將看到如何將一個Unicode碼點寫到字符串面值中。

+

一個原生的字符串面值形式是...,使用反引號代替雙引號。在原生的字符串面值中,沒有轉義操作;全部的內容都是字面的意思,包含退格和換行,因此一個程序中的原生字符串面值可能跨越多行(譯註:在原生字符串面值內部是無法直接寫字符的,可以用八進製或十六進製轉義或+"```"鏈接字符串常量完成)。唯一的特殊處理是會刪除迴車以保證在所有平台上的值都是一樣的,包括那些把迴車也放入文本文件的繫統(譯註:Windows繫統會把迴車和換行一起放入文本文件中)。

+

原生字符串面值用於編寫正則表達式會很方便,因爲正則表達式往往會包含很多反斜槓。原生字符串面值同時被廣泛應用於HTML模闆、JSON面值、命令行提示信息以及那些需要擴展到多行的場景。

const GoUsage = `Go is a tool for managing Go source code.
 
 Usage:
@@ -2082,38 +2086,38 @@ Usage:
 ...`
 

3.5.2. Unicode

-

在很久以前, 世界比較簡單的, 起碼計算機就隻有一個ASCII字符集: 美國信息交換標準代碼. ASCII, 更準確地説是美國的ASCII, 使用 7bit 來表示 128 個字符: 包含英文字母的大小寫, 數字, 各種標點符號和設置控製符. 對於早期的計算機程序, 這些足夠了, 但是這也導致了世界上很多其他地區的用戶無法直接使用自己的書寫繫統. 隨着互聯網的發展, 混合多種語言的數據變了很常見. 如何有效處理這些包含了各種語言的豐富多樣的數據呢?

-

答案就是使用Unicode(unicode.org), 它收集了這個世界上所有的書寫繫統, 包括重音符號和其他變音符號, 製表符和迴車符, 還有很多神祕符號, 每個符號都分配一個Unicode碼點, Unicode碼點對應Go語言中的rune類型.

-

第八版本的Unicode標準收集了超過120,000個字符, 涵蓋超過100種語言. 這些在計算機程序和數據中是如何體現的那? 通用的表示一個Unicode碼點的數據類型是int32, 也就是Go語言中rune對應的類型; 它的同義詞rune符文正是這個意思.

-

我們可以將一個符文序列表示爲一個int32序列. 這種編碼方式叫UTF-32或UCS-4, 每個Unicode碼點都使用同樣的大小32bit來表示. 這種方式比較簡單統一, 它會浪費很多存儲空間, 因爲大數據計算機可讀的文本是ASCII字符, 本來每個ASCII字符隻需要8bit或1字節就能表示. 卽使是常用的字符也遠少於65,536個, 也就是説用16bit編碼方式就能表達常用字符. 但是, 還有更好的編碼方法嗎?

+

在很久以前,世界還是比較簡單的,起碼計算機世界就隻有一個ASCII字符集:美国信息交換標準代碼。ASCII,更準確地説是美国的ASCII,使用7bit來表示128個字符:包含英文字母的大小寫、數字、各種標點符號和設置控製符。對於早期的計算機程序來説,這些就足夠了,但是這也導致了世界上很多其他地區的用戶無法直接使用自己的符號繫統。隨着互聯網的發展,混合多種語言的數據變得很常見(譯註:比如本身的英文原文或中文翻譯都包含了ASCII、中文、日文等多種語言字符)。如何有效處理這些包含了各種語言的豐富多樣的文本數據呢?

+

答案就是使用Unicode( http://unicode.org ),它收集了這個世界上所有的符號繫統,包括重音符號和其它變音符號,製表符和迴車符,還有很多神祕的符號,每個符號都分配一個唯一的Unicode碼點,Unicode碼點對應Go語言中的rune整數類型(譯註:rune是int32等價類型)。

+

在第八版本的Unicode標準收集了超過120,000個字符,涵蓋超過100多種語言。這些在計算機程序和數據中是如何體現的呢?通用的表示一個Unicode碼點的數據類型是int32,也就是Go語言中rune對應的類型;它的同義詞rune符文正是這個意思。

+

我們可以將一個符文序列表示爲一個int32序列。這種編碼方式叫UTF-32或UCS-4,每個Unicode碼點都使用同樣的大小32bit來表示。這種方式比較簡單統一,但是它會浪費很多存儲空間,因爲大數據計算機可讀的文本是ASCII字符,本來每個ASCII字符隻需要8bit或1字節就能表示。而且卽使是常用的字符也遠少於65,536個,也就是説用16bit編碼方式就能表達常用字符。但是,還有其它更好的編碼方法嗎?

3.5.3. UTF-8

-

UTF8是一個將Unicode碼點編碼爲字節序列的變長編碼. UTF8編碼由Go語言之父 Ken Thompson 和 Rob Pike 共同發明, 現在已經是Unicode的標準. UTF8使用1到4個字節來表示每個Unicode碼點符號, ASCII部分字符隻使用1個字節, 常用字符部分使用2或3個字節. 每個符號編碼後第一個字節的高端bit位用於表示總共有多少個字節. 如果第一個字節的高端bit爲0, 則表示對應7bit的ASCII字符, 每個字符一個字節, 和傳統的ASCII編碼兼容. 如果第一個字節的高端bit是110, 則説明需要2個字節; 後續的每個高端bit都以10開頭. 更大的Unicode碼點也是采用類似的策略處理.

+

UTF8是一個將Unicode碼點編碼爲字節序列的變長編碼。UTF8編碼由Go語言之父Ken Thompson和Rob Pike共同發明的,現在已經是Unicode的標準。UTF8編碼使用1到4個字節來表示每個Unicode碼點,ASCII部分字符隻使用1個字節,常用字符部分使用2或3個字節表示。每個符號編碼後第一個字節的高端bit位用於表示總共有多少編碼個字節。如果第一個字節的高端bit爲0,則表示對應7bit的ASCII字符,ASCII字符每個字符依然是一個字節,和傳統的ASCII編碼兼容。如果第一個字節的高端bit是110,則説明需要2個字節;後續的每個高端bit都以10開頭。更大的Unicode碼點也是采用類似的策略處理。

0xxxxxxx                             runes 0-127    (ASCII)
 110xxxxx 10xxxxxx                    128-2047       (values <128 unused)
 1110xxxx 10xxxxxx 10xxxxxx           2048-65535     (values <2048 unused)
 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  65536-0x10ffff (other values unused)
-

變長的編碼無法直接通過索引來訪問第n個字符, 但是UTF8穫得了很多額外的優點. 首先UTF8編碼比較緊湊, 兼容ASCII, 併且可以自動同步: 它可以通過向前迴朔最多2個字節就能確定當前字符編碼的開始字節的位置. 它也是一個前綴編碼, 所以當從左向右解碼時不會有任何歧義也併不需要向前査看. 沒有任何字符的編碼是其它字符編碼的子串, 或是其它編碼序列的字串, 因此蒐索一個字符時隻要蒐索它的字節編碼序列卽可, 不用擔心前後的上下文會對蒐索結果産生榦擾. 同時UTF8編碼的順序和Unicode碼點的順序一致, 因此可以直接排序UTF8編碼序列. 同業也沒有嵌入的NUL(0)字節, 可以很好地兼容那些使用NUL作爲字符串結尾的編程語言.

-

Go的源文件采用UTF8編碼, 併且Go處理UTF8編碼的文本也很齣色. unicode 包提供了諸多處理 rune 字符相關功能的函數函數(區分字母和數組, 或者是字母的大寫和小寫轉換等), unicode/utf8 包了提供了rune 字符序列的UTF8編碼和解碼的功能.

-

有很多Unicode字符很難直接從鍵盤輸入, 併且很多字符有着相似的結構; 有一些甚至是不可見的字符. Go字符串面值中的Unicode轉義字符讓我們可以通過Unicode碼點輸入特殊的字符. 有兩種形式, \uhhhh 對應16bit的碼點值, \Uhhhhhhhh 對應32bit的碼點值, 其中h是一個十六進製數字; 一般很少需要使用32bit的形式. 每一個對應碼點的UTF8編碼. 例如: 下面的字母串面值都表示相同的值:

+

變長的編碼無法直接通過索引來訪問第n個字符,但是UTF8編碼獲得了很多額外的優點。首先UTF8編碼比較緊湊,完全兼容ASCII碼,併且可以自動同步:它可以通過向前迴朔最多2個字節就能確定當前字符編碼的開始字節的位置。它也是一個前綴編碼,所以當從左向右解碼時不會有任何歧義也併不需要向前査看(譯註:像GBK之類的編碼,如果不知道起點位置則可能會出現歧義)。沒有任何字符的編碼是其它字符編碼的子串,或是其它編碼序列的字串,因此蒐索一個字符時隻要蒐索它的字節編碼序列卽可,不用擔心前後的上下文會對蒐索結果産生榦擾。同時UTF8編碼的順序和Unicode碼點的順序一致,因此可以直接排序UTF8編碼序列。同時因爲沒有嵌入的NUL(0)字節,可以很好地兼容那些使用NUL作爲字符串結尾的編程語言。

+

Go語言的源文件采用UTF8編碼,併且Go語言處理UTF8編碼的文本也很出色。unicode包提供了諸多處理rune字符相關功能的函數(比如區分字母和數組,或者是字母的大寫和小寫轉換等),unicode/utf8包則提供了用於rune字符序列的UTF8編碼和解碼的功能。

+

有很多Unicode字符很難直接從鍵盤輸入,併且還有很多字符有着相似的結構;有一些甚至是不可見的字符(譯註:中文和日文就有很多相似但不同的字)。Go語言字符串面值中的Unicode轉義字符讓我們可以通過Unicode碼點輸入特殊的字符。有兩種形式:\uhhhh對應16bit的碼點值,\Uhhhhhhhh對應32bit的碼點值,其中h是一個十六進製數字;一般很少需要使用32bit的形式。每一個對應碼點的UTF8編碼。例如:下面的字母串面值都表示相同的值:

"世界"
 "\xe4\xb8\x96\xe7\x95\x8c"
 "\u4e16\u754c"
 "\U00004e16\U0000754c"
-

上面三個轉義序列爲第一個字符串提供替代寫法, 但是它們的值都是相同的.

-

Unicode轉義也可以使用在rune字符中. 下面三個字符是等價的:

+

上面三個轉義序列都爲第一個字符串提供替代寫法,但是它們的值都是相同的。

+

Unicode轉義也可以使用在rune字符中。下面三個字符是等價的:

'世' '\u4e16' '\U00004e16'
-

對於小於256碼點值可以寫在一個十六進製轉義字節中, 例如 '\x41' 對應 'A' 字符, 但是對於更大的碼點則必鬚使用 \u 或 \U 轉義形式. 因此, '\xe4\xb8\x96' 併不是一個合法的rune字符, 雖然這三個字節對應一個有效的UTF8編碼的碼點.

-

得意於UTF8優良的設計, 諸多字符串操作都不需要解碼. 我們可以不用解碼直接測試一個字符串是否是另一個字符串的前綴:

+

對於小於256碼點值可以寫在一個十六進製轉義字節中,例如'\x41'對應字符'A',但是對於更大的碼點則必鬚使用\u或\U轉義形式。因此,'\xe4\xb8\x96'併不是一個合法的rune字符,雖然這三個字節對應一個有效的UTF8編碼的碼點。

+

得益於UTF8編碼優良的設計,諸多字符串操作都不需要解碼操作。我們可以不用解碼直接測試一個字符串是否是另一個字符串的前綴:

func HasPrefix(s, prefix string) bool {
     return len(s) >= len(prefix) && s[:len(prefix)] == prefix
 }
 
-

或者是後綴測試:

+

或者是後綴測試:

func HasSuffix(s, suffix string) bool {
     return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
 }
 
-

或者是包含子串測試:

+

或者是包含子串測試:

func Contains(s, substr string) bool {
     for i := 0; i < len(s); i++ {
         if HasPrefix(s[i:], substr) {
@@ -2123,72 +2127,72 @@ Usage:
     return false
 }
 
-

對於UTF8編碼後文本的處理和原始的字節處理邏輯一樣. 但是對應很多其它編碼則併不是這樣的. (上面的函數都來自 strings 字符串處理包, 雖然它們的實現包含了一個用哈希技術優化的 Contains 實現.)

-

另以方面, 如果我們眞的關心每個Unicode字符, 我們可以使用其它機製. 考慮前面的第一個例子中的字符串, 它包混合了中西兩種字符. 圖3.5展示了它的內存表示形式. 字符串包含13個字節, 以UTF8形式編碼, 但是隻對應9個Unicode字符:

+

對於UTF8編碼後文本的處理和原始的字節處理邏輯是一樣的。但是對應很多其它編碼則併不是這樣的。(上面的函數都來自strings字符串處理包,眞實的代碼包含了一個用哈希技術優化的Contains 實現。)

+

另一方面,如果我們眞的關心每個Unicode字符,我們可以使用其它處理方式。考慮前面的第一個例子中的字符串,它包混合了中西兩種字符。圖3.5展示了它的內存表示形式。字符串包含13個字節,以UTF8形式編碼,但是隻對應9個Unicode字符:

import "unicode/utf8"
 
 s := "Hello, 世界"
 fmt.Println(len(s))                    // "13"
 fmt.Println(utf8.RuneCountInString(s)) // "9"
 
-

爲了處理這些眞實的字符, 我們需要一個UTF8解碼器. unicode/utf8 包提供了實現, 我們可以這樣使用:

+

爲了處理這些眞實的字符,我們需要一個UTF8解碼器。unicode/utf8包提供了該功能,我們可以這樣使用:

for i := 0; i < len(s); {
     r, size := utf8.DecodeRuneInString(s[i:])
     fmt.Printf("%d\t%c\n", i, r)
     i += size
 }
 
-

每一次調用 DecodeRuneInString 函數都返迴一個 r 和 長度, r 對應字符本身, 長度對應r采用UTF8編碼後的字節數目. 長度可以用於更新第i個字符在字符串中的字節索引位置. 但是這種方式是笨拙的, 我們需要更簡潔的語法. 幸運的是, Go的range循環在處理字符串的時候, 會自動隱式解碼UTF8字符串. 下面的循環運行如圖3.5所示; 需要註意的是對於非ASCII, 索引更新的步長超過1個字節.

+

每一次調用DecodeRuneInString函數都返迴一個r和長度,r對應字符本身,長度對應r采用UTF8編碼後的編碼字節數目。長度可以用於更新第i個字符在字符串中的字節索引位置。但是這種編碼方式是笨拙的,我們需要更簡潔的語法。幸運的是,Go語言的range循環在處理字符串的時候,會自動隱式解碼UTF8字符串。下面的循環運行如圖3.5所示;需要註意的是對於非ASCII,索引更新的步長將超過1個字節。

for i, r := range "Hello, 世界" {
     fmt.Printf("%d\t%q\t%d\n", i, r, r)
 }
 
-

我們可以使用一個簡單的循環來統計字符串中字符的數目, 像這樣:

+

我們可以使用一個簡單的循環來統計字符串中字符的數目,像這樣:

n := 0
 for _, _ = range s {
     n++
 }
 
-

想其它形式的循環那樣, 我們可以忽略不需要的變量:

+

像其它形式的循環那樣,我們也可以忽略不需要的變量:

n := 0
 for range s {
     n++
 }
 
-

或者我們可以直接調用 utf8.RuneCountInString(s) 函數.

-

正如我們前面提到了, 文本字符串采用UTF8編碼隻是一種慣例,但是對於循環的眞正字符串併不是一個慣例, 這是正確的. 如果用於循環的字符串隻是一個普通的二進製數據, 或者是含有錯誤編碼的UTF8數據, 將會發送什麽?

-

每一個UTF8字符解碼, 不管是顯示地調用 utf8.DecodeRuneInString 解碼或在 range 循環中隱式地解碼, 如果遇到一個錯誤的輸入字節, 將生成一個特别的Unicode字符 '\uFFFD', 在印刷中這個符號通常是一個黑色六角或鑽石形狀, 里面包含一個白色的問號(?). 當程序遇到這樣的一個字符, 通常是一個信號, 説明輸入併不是一個完美沒有錯誤的的UTF8編碼字符串.

-

UTF8作爲交換格式是非常方便的, 但是在程序內部采用rune類型可能更方便, 因爲rune大小一致, 支持數組索引和方便切割.

-

string 接受到 []rune 的轉換, 可以將一個UTF8編碼的字符串解碼爲Unicode字符序列:

+

或者我們可以直接調用utf8.RuneCountInString(s)函數。

+

正如我們前面提到的,文本字符串采用UTF8編碼隻是一種慣例,但是對於循環的眞正字符串併不是一個慣例,這是正確的。如果用於循環的字符串隻是一個普通的二進製數據,或者是含有錯誤編碼的UTF8數據,將會發送什麽呢?

+

每一個UTF8字符解碼,不管是顯式地調用utf8.DecodeRuneInString解碼或是在range循環中隱式地解碼,如果遇到一個錯誤的UTF8編碼輸入,將生成一個特别的Unicode字符'\uFFFD',在印刷中這個符號通常是一個黑色六角或鑽石形狀,里面包含一個白色的問號(?)。當程序遇到這樣的一個字符,通常是一個危險信號,説明輸入併不是一個完美沒有錯誤的UTF8字符串。

+

UTF8字符串作爲交換格式是非常方便的,但是在程序內部采用rune序列可能更方便,因爲rune大小一致,支持數組索引和方便切割。

+

string接受到[]rune的類型轉換,可以將一個UTF8編碼的字符串解碼爲Unicode字符序列:

// "program" in Japanese katakana
 s := "プログラム"
 fmt.Printf("% x\n", s) // "e3 83 97 e3 83 ad e3 82 b0 e3 83 a9 e3 83 a0"
 r := []rune(s)
 fmt.Printf("%x\n", r)  // "[30d7 30ed 30b0 30e9 30e0]"
 
-

(在第一個Printf中的 % x 參數用於在每個十六進製數字前插入一個空格.)

-

如果是將一個 []rune 類型的Unicode字符切片或數組轉爲string, 則對它們進行UTF8編碼:

+

(在第一個Printf中的% x參數用於在每個十六進製數字前插入一個空格。)

+

如果是將一個[]rune類型的Unicode字符slice或數組轉爲string,則對它們進行UTF8編碼:

fmt.Println(string(r)) // "プログラム"
 
-

將一個整數轉型爲字符串意思是生成整數作爲Unicode碼點的UTF8編碼的字符串:

+

將一個整數轉型爲字符串意思是生成以隻包含對應Unicode碼點字符的UTF8字符串:

fmt.Println(string(65))     // "A", not "65"
 fmt.Println(string(0x4eac)) // "京"
 
-

如果對應碼點的字符是無效的, 則用'\uFFFD'無效字符作爲替換:

+

如果對應碼點的字符是無效的,則用'\uFFFD'無效字符作爲替換:

fmt.Println(string(1234567)) // "(?)"
 

3.5.4. 字符串和Byte切片

-

標準庫中有四個包對字符串處理尤爲重要: bytes, strings, strconv, 和 unicode. strings 包提供了許多如字符串的査詢, 替換, 比較, 截斷, 拆分, 和合併等功能.

-

bytes 包也提供了很多類似功能的函數, 但是針對和字符串有着相同結構的 []byte 類型. 因爲字符串是隻讀的, 因此逐步構建字符串會導致很多分配和複製. 在這種情況下, 使用 bytes.Buffer 類型會更有效, 稍後我們將展示.

-

strconv 包提供了 布爾型, 整型數, 浮點數和對應字符串間的相互轉換, 還提供了雙引號的字符串面值形式的轉換.

-

unicode 包提供了類似 IsDigit, IsLetter, IsUpper, 和 IsLower 等功能, 它們用於給字符分類. 每個函數有一個單一的rune類型的參數, 然後返迴一個布爾值. 像 ToUpper 和 ToLower 之類的轉換函數將用於rune字符的大小寫轉換. 所有的這些函數都是遵循Unicode標準定義的字母,數字等分類規范. strings 包也有類似的函數, 它們是 ToUpper 和 ToLower, 將原始字符串的每個字符都做相應的轉換, 然後返迴新的字符串.

-

下面的 basename 函數的靈感由Unix shell的同名工具而來. 在我們實現的版本中, basename(s) 將看起來像是繫統路徑的前綴刪除, 同時將看似文件類型的後綴名刪除:

+

標準庫中有四個包對字符串處理尤爲重要:bytes、strings、strconv和unicode包。strings包提供了許多如字符串的査詢、替換、比較、截斷、拆分和合併等功能。

+

bytes包也提供了很多類似功能的函數,但是針對和字符串有着相同結構的[]byte類型。因爲字符串是隻讀的,因此逐步構建字符串會導致很多分配和複製。在這種情況下,使用bytes.Buffer類型將會更有效,稍後我們將展示。

+

strconv包提供了布爾型、整型數、浮點數和對應字符串的相互轉換,還提供了雙引號轉義相關的轉換。

+

unicode包提供了IsDigit、IsLetter、IsUpper和IsLower等類似功能,它們用於給字符分類。每個函數有一個單一的rune類型的參數,然後返迴一個布爾值。而像ToUpper和ToLower之類的轉換函數將用於rune字符的大小寫轉換。所有的這些函數都是遵循Unicode標準定義的字母、數字等分類規范。strings包也有類似的函數,它們是ToUpper和ToLower,將原始字符串的每個字符都做相應的轉換,然後返迴新的字符串。

+

下面例子的basename函數靈感於Unix shell的同名工具。在我們實現的版本中,basename(s)將看起來像是繫統路徑的前綴刪除,同時將看似文件類型的後綴名部分刪除:

fmt.Println(basename("a/b/c.go")) // "c"
 fmt.Println(basename("c.d.go"))   // "c.d"
 fmt.Println(basename("abc"))      // "abc"
 
-

第一個版本併沒有使用任何庫, 全部手工實現:

+

第一個版本併沒有使用任何庫,全部手工硬編碼實現:

gopl.io/ch3/basename1
 // basename removes directory components and a .suffix.
 // e.g., a => a, a.go => a, a/b/c.go => c, a/b.c.go => b.c
@@ -2210,7 +2214,7 @@ fmt.Println(basename("abc"))      return s
 }
 
-

一個簡化的版本使用了 strings.LastIndex 庫函數:

+

簡化個版本使用了strings.LastIndex庫函數:

gopl.io/ch3/basename2
 
 func basename(s string) string {
@@ -2222,8 +2226,8 @@ fmt.Println(basename("abc"))      return s
 }
 
-

path 和 path/filepath 包提供了關於文件名更一般的函數操作. 使用斜槓分隔路徑可以在任何操作繫統上工作. 斜槓本身不應該用於文件名, 但是在其他一些領域可能是有效的, 例如URL路徑組件. 相比之下, path/filepath 包使用操作繫統本身的路徑規則, 例如 POSIX 繫統使用 /foo/bar, Microsoft Windows 使用 c:\foo\bar 等.

-

讓我們繼續另一個字符串的例子. 任務是將一個表示整值的字符串, 每隔三個字符插入一個逗號, 例如 "12345" 處理後成爲 "12,345". 這個版本隻適用於整數類型; 支持浮點數類型的支持留做練習.

+

path和path/filepath包提供了關於文件路徑名更一般的函數操作。使用斜槓分隔路徑可以在任何操作繫統上工作。斜槓本身不應該用於文件名,但是在其他一些領域可能會用於文件名,例如URL路徑組件。相比之下,path/filepath包則使用操作繫統本身的路徑規則,例如POSIX繫統使用/foo/bar,而Microsoft Windows使用c:\foo\bar等。

+

讓我們繼續另一個字符串的例子。函數的功能是將一個表示整值的字符串,每隔三個字符插入一個逗號分隔符,例如“12345”處理後成爲“12,345”。這個版本隻適用於整數類型;支持浮點數類型的支持留作練習。

gopl.io/ch3/comma
 
 // comma inserts commas in a non-negative decimal integer string.
@@ -2235,15 +2239,15 @@ fmt.Println(basename("abc"))      return comma(s[:n-3]) + "," + s[n-3:]
 }
 
-

輸入 comma 的參數是一個字符串. 如果輸入字符串的長度小於或等於3的話, 則不需要插入逗號. 否則, comma 將在最後三個字符前切割爲兩個兩個子串, 然後用前面的子串遞歸調用自身.

-

一個字符串包含的字節數組, 一旦創建, 是不可變的. 相比之下, 一個字節切片的原始則可以自由地脩改.

-

字符串和字節切片可以相互轉換:

+

輸入comma函數的參數是一個字符串。如果輸入字符串的長度小於或等於3的話,則不需要插入逗分隔符。否則,comma函數將在最後三個字符前位置將字符串切割爲兩個兩個子串併插入逗號分隔符,然後通過遞歸調用自身來出前面的子串。

+

一個字符串是包含的隻讀字節數組,一旦創建,是不可變的。相比之下,一個字節slice的元素則可以自由地脩改。

+

字符串和字節slice之間可以相互轉換:

s := "abc"
 b := []byte(s)
 s2 := string(b)
 
-

從概念上講, []byte(s) 轉換是分配了一個新的字節數組保存了字符串數據的拷貝, 然後引用這個字節數組. 編譯器的優化可以避免在一些場景下分配和複製字符串數據, 但總的來説需要確保在b被脩改的情況下, 原始的s字符串也不會改變. 將一個字節切片轉到字符串的 string(b) 操作則是構造一個拷貝, 以確保s2字符串是隻讀的.

-

爲了避免轉換中不必要的內存分配, bytes包和strings同時提供了許多類似的實用函數. 下面是strings包中的六個函數:

+

從概念上講,一個[]byte(s)轉換是分配了一個新的字節數組用於保存字符串數據的拷貝,然後引用這個底層的字節數組。編譯器的優化可以避免在一些場景下分配和複製字符串數據,但總的來説需要確保在變量b被脩改的情況下,原始的s字符串也不會改變。將一個字節slice轉到字符串的string(b)操作則是構造一個字符串拷貝,以確保s2字符串是隻讀的。

+

爲了避免轉換中不必要的內存分配,bytes包和strings同時提供了許多實用函數。下面是strings包中的六個函數:

func Contains(s, substr string) bool
 func Count(s, sep string) int
 func Fields(s string) []string
@@ -2251,7 +2255,7 @@ s2 := string(b)
 func Index(s, sep string) int
 func Join(a []string, sep string) string
 
-

bytes 包中對應的六個函數:

+

bytes包中也對應的六個函數:

func Contains(b, subslice []byte) bool
 func Count(s, sep []byte) int
 func Fields(s []byte) [][]byte
@@ -2259,8 +2263,8 @@ s2 := string(b)
 func Index(s, sep []byte) int
 func Join(s [][]byte, sep []byte) []byte
 
-

唯一的區别是字符串類型參數被替換成了字節切片類型的參數.

-

bytes 包還提供了 Buffer 類型用於字節切片的緩存. 一個 Buffer 開始是空的, 但是隨着 string, byte, 和 []byte 等類型數據的寫入可以動態增長, 一個 bytes.Buffer 變量併不需要處理化, 因此零值也是有效的:

+

它們之間唯一的區别是字符串類型參數被替換成了字節slice類型的參數。

+

bytes包還提供了Buffer類型用於字節slice的緩存。一個Buffer開始是空的,但是隨着string、byte或[]byte等類型數據的寫入可以動態增長,一個bytes.Buffer變量併不需要處理化,因爲零值也是有效的:

gopl.io/ch3/printints
 
 // intsToString is like fmt.Sprintf(values) but adds commas.
@@ -2281,30 +2285,30 @@ s2 := string(b)
     fmt.Println(intsToString([]int{1, 2, 3})) // "[1, 2, 3]"
 }
 
-

當向 bytes.Buffer 添加任意字符的UTF8編碼, 最好使用 bytes.Buffer 的 WriteRune 方法, 但是 WriteByte 方法對於寫入類似 '[' 和 ']' 等 ASCII 字符則更有效.

-

bytes.Buffer 類型有着諸多實用的功能, 我們在第七章討論接口時層涉及到, 我們將看看如何將它用作一個I/O 的輸入和輸齣對象, 例如 Fprintf 的 io.Writer 輸齣, 或作爲輸入源 io.Reader.

-

練習3.10: 編寫一個非遞歸版本的comma函數, 使用 bytes.Buffer 代替字符串鏈接操作.

-

練習3.11: 完善 comma 函數, 以支持浮點數處理和一個可選的正負號處理.

-

練習3.12: 編寫一個函數, 判斷兩個字符串是否是是相互打亂的, 也就是説它們有着相同的字符, 但是對應不同的順序.

+

當向bytes.Buffer添加任意字符的UTF8編碼時,最好使用bytes.Buffer的WriteRune方法,但是WriteByte方法對於寫入類似'['和']'等ASCII字符則會更加有效。

+

bytes.Buffer類型有着很多實用的功能,我們在第七章討論接口時將會涉及到,我們將看看如何將它用作一個I/O的輸入和輸出對象,例如當做Fprintf的io.Writer輸出對象,或者當作io.Reader類型的輸入源對象。

+

練習 3.10: 編寫一個非遞歸版本的comma函數,使用bytes.Buffer代替字符串鏈接操作。

+

練習 3.11: 完善comma函數,以支持浮點數處理和一個可選的正負號的處理。

+

練習 3.12: 編寫一個函數,判斷兩個字符串是否是是相互打亂的,也就是説它們有着相同的字符,但是對應不同的順序。

3.5.5. 字符串和數字的轉換

-

除了字符串, 字符, 字節 之間的轉換, 字符串和數值之間的轉換也比較常見. 由 strconv 包提供這類轉換功能.

-

將一個整數轉爲字符串, 一種方法是用 fmt.Sprintf; 另一個方法是用 strconv.Itoa(“整數到ASCII”):

+

除了字符串、字符、字節之間的轉換,字符串和數值之間的轉換也比較常見。由strconv包提供這類轉換功能。

+

將一個整數轉爲字符串,一種方法是用fmt.Sprintf返迴一個格式化的字符串;另一個方法是用strconv.Itoa(“整數到ASCII”):

x := 123
 y := fmt.Sprintf("%d", x)
 fmt.Println(y, strconv.Itoa(x)) // "123 123"
 
-

FormatInt和FormatUint可以用不同的進製來格式化數字:

+

FormatInt和FormatUint函數可以用不同的進製來格式化數字:

fmt.Println(strconv.FormatInt(int64(x), 2)) // "1111011"
 
-

fmt.Printf 函數的 %b, %d, %u, 和 %x 等參數提供功能往往比strconv 包的 Format 函數方便很多, 特别是在需要包含附加信息的時候:

+

fmt.Printf函數的%b、%d、%u和%x等參數提供功能往往比strconv包的Format函數方便很多,特别是在需要包含附加額外信息的時候:

s := fmt.Sprintf("x=%b", x) // "x=1111011"
 
-

如果要將一個字符串解析爲整數, 可以使用 strconv 包的 Atoi 或 ParseInt 函數, 還有用於解析無符號整數的 ParseUint 函數:

+

如果要將一個字符串解析爲整數,可以使用strconv包的Atoi或ParseInt函數,還有用於解析無符號整數的ParseUint函數:

x, err := strconv.Atoi("123")             // x is an int
 y, err := strconv.ParseInt("123", 10, 64) // base 10, up to 64 bits
 
-

ParseInt 函數的第三個參數是用於指定整型數的大小; 例如16表示int16, 0則表示int. 在任何情況下, 返迴的結果 y 總是 int64 類型, 你可以通過強製類型轉換將它轉爲更小的整數類型.

-

有時候也會使用 fmt.Scanf 來解析輸入的字符串和數字, 特别是當字符串和數字混合在一行的時候, 它可以靈活處理不完整或不規則的輸入.

+

ParseInt函數的第三個參數是用於指定整型數的大小;例如16表示int16,0則表示int。在任何情況下,返迴的結果y總是int64類型,你可以通過強製類型轉換將它轉爲更小的整數類型。

+

有時候也會使用fmt.Scanf來解析輸入的字符串和數字,特别是當字符串和數字混合在一行的時候,它可以靈活處理不完整或不規則的輸入。

@@ -2336,7 +2340,7 @@ y, err := strconv.ParseInt("123", require(["gitbook"], function(gitbook) { - var config = {"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}}; + var config = {"katex":{},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}}; gitbook.start(config); }); diff --git a/ch3/ch3-06.html b/ch3/ch3-06.html index e3fadf5..9d94102 100644 --- a/ch3/ch3-06.html +++ b/ch3/ch3-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,19 +2024,19 @@

3.6. 常量

-

常量表達式的值在編譯期計算, 而不是在運行期. 每種常量的潛在類型都是基礎類型: boolean, string, 或數字.

-

一個常量的聲明語句定義了常量的名字, 和變量的聲明語法類似, 常量的值不可脩改, 這樣可以防止在運行期被意外或惡意的脩改. 例如, 常量比變量更適合用於表達像 π 之類的數學常數, 因爲它們的值不會變化:

+

常量表達式的值在編譯期計算,而不是在運行期。每種常量的潛在類型都是基礎類型:boolean、string或數字。

+

一個常量的聲明語句定義了常量的名字,和變量的聲明語法類似,常量的值不可脩改,這樣可以防止在運行期被意外或惡意的脩改。例如,常量比變量更適合用於表達像π之類的數學常數,因爲它們的值不會發生變化:

const pi = 3.14159 // approximately; math.Pi is a better approximation
 
-

和變量聲明一樣, 可以批量聲明多個常量; 這比較適合聲明一組相關的常量:

+

和變量聲明一樣,可以批量聲明多個常量;這比較適合聲明一組相關的常量:

const (
     e  = 2.71828182845904523536028747135266249775724709369995957496696763
     pi = 3.14159265358979323846264338327950288419716939937510582097494459
 )
 
-

許多常量的運算可以在編譯期完成, 這樣可以減少運行時的工作, 也方便其他編譯優化. 當操作數是常量時, 一些運行時的錯誤可以在編譯時發現, 例如整數除零, 字符串索引越界, 任何導致無效浮點數的操作等.

-

常量間的所有算術運算, 邏輯運算和比較運算的結果也是常量, 對常量的類型轉換操作或以下函數調用都是返迴常量結果: len, cap, real, imag, complex, 和 unsafe.Sizeof(§13.1).

-

因爲它們的值是在編譯期就確定的, 因此常量可以是構成類型的一部分, 例如用於指定數組類型的長度:

+

所有常量的運算都可以在編譯期完成,這樣可以減少運行時的工作,也方便其他編譯優化。當操作數是常量時,一些運行時的錯誤也可以在編譯時被發現,例如整數除零、字符串索引越界、任何導致無效浮點數的操作等。

+

常量間的所有算術運算、邏輯運算和比較運算的結果也是常量,對常量的類型轉換操作或以下函數調用都是返迴常量結果:len、cap、real、imag、complex和unsafe.Sizeof(§13.1)。

+

因爲它們的值是在編譯期就確定的,因此常量可以是構成類型的一部分,例如用於指定數組類型的長度:

const IPv4Len = 4
 
 // parseIPv4 parses an IPv4 address (d.d.d.d).
@@ -2041,14 +2045,14 @@
     // ...
 }
 
-

一個常量的聲明也可以包含一個類型和一個值, 但是如果沒有顯式指明類型, 那麽將從右邊的表達式推斷類型. 在下面的代碼中, time.Duration 是一個命名類型, 底層類型是 int64, time.Minute 是對應類型的常量. 下面聲明的兩個常量都是 time.Duration 類型, 可以通過 %T 參數打印類型信息:

+

一個常量的聲明也可以包含一個類型和一個值,但是如果沒有顯式指明類型,那麽將從右邊的表達式推斷類型。在下面的代碼中,time.Duration是一個命名類型,底層類型是int64,time.Minute是對應類型的常量。下面聲明的兩個常量都是time.Duration類型,可以通過%T參數打印類型信息:

const noDelay time.Duration = 0
 const timeout = 5 * time.Minute
 fmt.Printf("%T %[1]v\n", noDelay)     // "time.Duration 0"
 fmt.Printf("%T %[1]v\n", timeout)     // "time.Duration 5m0s
 fmt.Printf("%T %[1]v\n", time.Minute) // "time.Duration 1m0s"
 
-

如果是批量聲明的常量, 除了第一個外其他常量的右邊的表發生可以省略, 如果省略則表示使用前面的表達式, 對應的常量類型也一樣. 例如:

+

如果是批量聲明的常量,除了第一個外其它的常量右邊的初始化表達式都可以省略,如果省略初始化表達式則表示使用前面常量的初始化表達式寫法,對應的常量類型也一樣的。例如:

const (
     a = 1
     b
@@ -2058,10 +2062,10 @@ fmt.Printf("%T %[1]v\n", time.Minute)
 
 fmt.Println(a, b, c, d) // "1 1 2 2"
 
-

如果隻是簡單地複製右邊的常量表達式, 併沒有太實用的價值. 但是它可以帶來其他的特性, 那就是 iota 常量生成器.

+

如果隻是簡單地複製右邊的常量表達式,其實併沒有太實用的價值。但是它可以帶來其它的特性,那就是iota常量生成器語法。

3.6.1. iota 常量生成器

-

常量聲明可以使用 iota 常量生成器, 用於生成一組相似的常量值, 但是不用每行都寫一遍. 在一個 const 聲明語句中, 在開始一行 iota 將會被置爲0, 然後在每一個有常量聲明的行加一.

-

下面是來自 time 包的例子, 它首先定義了Weekday命名類型, 然後爲一週的每天定義一個常量, 從週日0開始. 這種類型一般被稱爲枚舉類型.

+

常量聲明可以使用iota常量生成器初始化,它用於生成一組以相似規則初始化的常量,但是不用每行都寫一遍初始化表達式。在一個const聲明語句中,在第一個聲明的常量所在的行,iota將會被置爲0,然後在每一個有常量聲明的行加一。

+

下面是來自time包的例子,它首先定義了一個Weekday命名類型,然後爲一週的每天定義了一個常量,從週日0開始。在其它編程語言中,這種類型一般被稱爲枚舉類型。

type Weekday int
 
 const (
@@ -2074,8 +2078,8 @@ fmt.Println(a, b, c, d) // "1 1 2 2"
     Saturday
 )
 
-

週一將對應0, 週一爲1, 如此等等.

-

我們也可以在複雜的常量表達式中使用 iota, 下面是來自 net 包的例子, 用於給一個無符號整數的最低5bit的每個bit給定一個名字:

+

週一將對應0,週一爲1,如此等等。

+

我們也可以在複雜的常量表達式中使用iota,下面是來自net包的例子,用於給一個無符號整數的最低5bit的每個bit指定一個名字:

type Flags uint
 
 const (
@@ -2086,7 +2090,7 @@ fmt.Println(a, b, c, d) // "1 1 2 2"
     FlagMulticast            // supports multicast access capability
 )
 
-

隨着 iota 的遞增, 每個常量對應表達式 1 << iota, 是連續的2的冪, 分别對應一個bit位置. 使用這些常量可以測試, 設置, 或清除對應的bit位的值:

+

隨着iota的遞增,每個常量對應表達式1 << iota,是連續的2的冪,分别對應一個bit位置。使用這些常量可以用於測試、設置或清除對應的bit位的值:

gopl.io/ch3/netflag
 
 func IsUp(v Flags) bool     { return v&FlagUp == FlagUp }
@@ -2104,7 +2108,7 @@ unc main() {
     fmt.Printf("%b %t\n", v, IsCast(v)) // "10010 true"
 }
 
-

下面是一個更複雜的例子, 每個常量都是1024的冪:

+

下面是一個更複雜的例子,每個常量都是1024的冪:

const (
     _ = 1 << (10 * iota)
     KiB // 1024
@@ -2117,33 +2121,33 @@ unc main() {
     YiB // 1208925819614629174706176
 )
 
-

iota 機製也有其局限性. 例如, 它併不能用於産生1000的冪(KB,MB,等等), 因爲併沒有計算冪的運算符.

-

練習3.13: 編寫KB,MB的常量聲明, 然後擴展到YB.

+

不過iota常量生成規則也有其局限性。例如,它併不能用於産生1000的冪(KB、MB等),因爲Go語言併沒有計算冪的運算符。

+

練習 3.13: 編寫KB、MB的常量聲明,然後擴展到YB。

3.6.2. 無類型常量

-

Go語言的常量有點不尋常. 雖然一個常量可以有任意有一個確定的基礎類型, 例如 int 或 float64, 或者是類似 time.Duration 這樣命名的基礎類型, 但是許多常量併沒有一個明確的基礎類型. 編譯期爲這些沒有明確的基礎類型的數字常量提供比基礎類型或機器更高精度的算術運算; 你可以認爲至少有256bit的運算精度. 這里有六種未明確類型的常量類型, 分别是 無類型的布爾型, 無類型的整數, 無類型的字符, 無類型的浮點數, 無類型的複數, 無類型的字符串.

-

通過延遲明確具體類型, 無類型的常量不僅可以提供更高的精度, 而且可以直接用於更多的表達式而不需要類型轉換. 例如 例子中的 ZiB 和 YiB 的值已經超齣任何Go中整數類型能表達的范圍, 但是它們依然是合法的常量, 而且可以像下面表達式這樣使用:

+

Go語言的常量有個不同尋常之處。雖然一個常量可以有任意有一個確定的基礎類型,例如int或float64,或者是類似time.Duration這樣命名的基礎類型,但是許多常量併沒有一個明確的基礎類型。編譯器爲這些沒有明確的基礎類型的數字常量提供比基礎類型更高精度的算術運算;你可以認爲至少有256bit的運算精度。這里有六種未明確類型的常量類型,分别是無類型的布爾型、無類型的整數、無類型的字符、無類型的浮點數、無類型的複數、無類型的字符串。

+

通過延遲明確常量的具體類型,無類型的常量不僅可以提供更高的運算精度,而且可以直接用於更多的表達式而不需要顯式的類型轉換。例如,例子中的ZiB和YiB的值已經超出任何Go語言中整數類型能表達的范圍,但是它們依然是合法的常量,而且可以像下面常量表達式依然有效(譯註:YiB/ZiB是在編譯期計算出來的,併且結果常量是1024,是Go語言int變量能有效表示的):

fmt.Println(YiB/ZiB) // "1024"
 
-

另一個例子, math.Pi 無類型的浮點數常量, 可以直接用於任意需要浮點數或複數的地方:

+

另一個例子,math.Pi無類型的浮點數常量,可以直接用於任意需要浮點數或複數的地方:

var x float32 = math.Pi
 var y float64 = math.Pi
 var z complex128 = math.Pi
 
-

如果 math.Pi 被確定爲特定類型, 比如 float64, 那麽結果精度可能會不一樣, 同時對於需要float32或complex128類型值的地方會需要一個明確的類型轉換:

+

如果math.Pi被確定爲特定類型,比如float64,那麽結果精度可能會不一樣,同時對於需要float32或complex128類型值的地方則會強製需要一個明確的類型轉換:

const Pi64 float64 = math.Pi
 
 var x float32 = float32(Pi64)
 var y float64 = Pi64
 var z complex128 = complex128(Pi64)
 
-

對於常量面值, 不同的寫法對應不同的類型. 例如 0, 0.0, 0i, 和 '\u0000' 雖然有着相同的常量值, 但是它們分别對應無類型的整數,無類型的浮點數,無類型的複數,和無類型的字符等不同的常量類型. 同樣, true 和 false 也是無類型的布爾類型, 字符串面值常量是無類型的字符串.

-

前面説過除法運算符 / 根據操作數的類型生成對應類型的結果. 因此, 不同寫法的常量除法表達式可能對應不同的結果:

+

對於常量面值,不同的寫法可能會對應不同的類型。例如0、0.0、0i和'\u0000'雖然有着相同的常量值,但是它們分别對應無類型的整數、無類型的浮點數、無類型的複數和無類型的字符等不同的常量類型。同樣,true和false也是無類型的布爾類型,字符串面值常量是無類型的字符串類型。

+

前面説過除法運算符/會根據操作數的類型生成對應類型的結果。因此,不同寫法的常量除法表達式可能對應不同的結果:

var f float64 = 212
 fmt.Println((f - 32) * 5 / 9)     // "100"; (f - 32) * 5 is a float64
 fmt.Println(5 / 9 * (f - 32))     // "0";   5/9 is an untyped integer, 0
 fmt.Println(5.0 / 9.0 * (f - 32)) // "100"; 5.0/9.0 is an untyped float
 
-

隻有常量可以是無類型的. 當一個無類型的常量被賦值給一個變量, 就像上面的第一行語句, 或者是像其餘三個語句中右邊表達式中含有明確類型的值, 無類型的常量將會被隱式轉換爲對應的類型, 如果可能的話.

+

隻有常量可以是無類型的。當一個無類型的常量被賦值給一個變量的時候,就像上面的第一行語句,或者是像其餘三個語句中右邊表達式中含有明確類型的值,無類型的常量將會被隱式轉換爲對應的類型,如果轉換合法的話。

var f float64 = 3 + 0i // untyped complex -> float64
 f = 2                  // untyped integer -> float64
 f = 1e123              // untyped floating-point -> float64
@@ -2155,7 +2159,7 @@ f = float64(2float64(1e123)
 f = float64('a')
 
-

無論是隱式或顯式, 將一種類型轉換爲另一種類型要求目標可以表示原始值. 對於浮點數和複數, 可能會有舍入處理:

+

無論是隱式或顯式轉換,將一種類型轉換爲另一種類型都要求目標可以表示原始值。對於浮點數和複數,可能會有舍入處理:

const (
     deadbeef = 0xdeadbeef // untyped int with value 3735928559
     a = uint32(deadbeef)  // uint32 with value 3735928559
@@ -2166,24 +2170,24 @@ f = float64('a
     f = uint(-1)          // compile error: constant underflows uint
 )
 
-

對於一個沒有顯式類型的變量聲明(包括短變量聲明語法), 無類型的常量會被隱式轉爲默認的變量類型, 就像下面的例子:

+

對於一個沒有顯式類型的變量聲明語法(包括短變量聲明語法),無類型的常量會被隱式轉爲默認的變量類型,就像下面的例子:

i := 0      // untyped integer;        implicit int(0)
 r := '\000' // untyped rune;           implicit rune('\000')
 f := 0.0    // untyped floating-point; implicit float64(0.0)
 c := 0i     // untyped complex;        implicit complex128(0i)
 
-

註意默認類型是規則的: 無類型的整數常量默認轉換爲int, 對應不確定的尺寸, 但是浮點數好複數常量則默認轉換爲float64和complex128. Go語言本身併沒有不確定的尺寸的浮點數和複數類型, 因爲如何不知道浮點數類型的話很難寫齣正確的數值算法.

-

如果要給變量一個不同的類型, 我們必鬚顯式地將無類型的常量轉化爲所需的類型, 或給聲明的變量指定類型, 像下面例子這樣:

+

註意默認類型是規則的:無類型的整數常量默認轉換爲int,對應不確定的內存大小,但是浮點數和複數常量則默認轉換爲float64和complex128。Go語言本身併沒有不確定內存大小的浮點數和複數類型,而且如果不知道浮點數類型的話將很難寫出正確的數值算法。

+

如果要給變量一個不同的類型,我們必鬚顯式地將無類型的常量轉化爲所需的類型,或給聲明的變量指定明確的類型,像下面例子這樣:

var i = int8(0)
 var i int8 = 0
 
-

當嚐試將這些無類型的常量轉爲一個接口值時(見第7章), 這些默認類型將顯得尤爲重要, 因爲要靠它們明確接口對應的動態類型.

+

當嚐試將這些無類型的常量轉爲一個接口值時(見第7章),這些默認類型將顯得尤爲重要,因爲要靠它們明確接口對應的動態類型。

fmt.Printf("%T\n", 0)      // "int"
 fmt.Printf("%T\n", 0.0)    // "float64"
 fmt.Printf("%T\n", 0i)     // "complex128"
 fmt.Printf("%T\n", '\000') // "int32" (rune)
 
-

現在我們已經講述了Go語言中全部的基礎數據類型. 下一步將演示如何用基礎數據類型組合成數組或結構體等複雜數據類型, 然後構建用於解決實際編程問題的數據結構, 這將是第四章的討論主題.

+

現在我們已經講述了Go語言中全部的基礎數據類型。下一步將演示如何用基礎數據類型組合成數組或結構體等複雜數據類型,然後構建用於解決實際編程問題的數據結構,這將是第四章的討論主題。

@@ -2215,7 +2219,7 @@ fmt.Printf("%T\n", diff --git a/ch3/ch3.html b/ch3/ch3.html index 07e4f01..996d5f9 100644 --- a/ch3/ch3.html +++ b/ch3/ch3.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

第3章 基礎數據類型

-

雖然從底層而言,所有的數據都是比特,但計算機操作的是固定位數的數,如整數、浮點數、比特組、內存地址。將這些數,進一步組織在一起,可表達更多的對象,如數據包、像素點、詩歌,甚至任何對象.Go提供了豐富的數據組織形式,這依賴於Go內置的數據類型。這些內置的數據類型,兼顧了硬件的特性和表達複雜數據結構的便捷性。

-

Go將數據類型分爲四類:基礎類型、複合類型、引用類型和接口類型。本章介紹基礎類型,包括:數字,字符串和布爾型。複合數據類型——數組(§4.1)和結構體(§4.2)——通過組合簡單類型,表達更加複雜的數據結構。引用類型包括指針(§2.3.2)、切片(§4.2))字典(§4.3)、函數(§5)、通道(§8).雖然種類很多,但它們都是對程序中一個變量或狀態的間接引用。這意味着對任一引用的脩改都會影響所有該引用的拷貝。我們將在第7章介紹接口類型。

+

雖然從底層而言,所有的數據都是由比特組成,但計算機一般操作的是固定大小的數,如整數、浮點數、比特數組、內存地址等。進一步將這些數組織在一起,就可表達更多的對象,例如數據包、像素點、詩歌,甚至其他任何對象。Go語言提供了豐富的數據組織形式,這依賴於Go語言內置的數據類型。這些內置的數據類型,兼顧了硬件的特性和表達複雜數據結構的便捷性。

+

Go語言將數據類型分爲四類:基礎類型、複合類型、引用類型和接口類型。本章介紹基礎類型,包括:數字、字符串和布爾型。複合數據類型——數組(§4.1)和結構體(§4.2)——是通過組合簡單類型,來表達更加複雜的數據結構。引用類型包括指針(§2.3.2)、切片(§4.2))字典(§4.3)、函數(§5)、通道(§8),雖然數據種類很多,但它們都是對程序中一個變量或狀態的間接引用。這意味着對任一引用類型數據的脩改都會影響所有該引用的拷貝。我們將在第7章介紹接口類型。

@@ -2053,7 +2057,7 @@ diff --git a/ch4/ch4-01.html b/ch4/ch4-01.html index 2df6959..c07ccd8 100644 --- a/ch4/ch4-01.html +++ b/ch4/ch4-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,7 +2024,94 @@

4.1. 數組

-

TODO

+

數組是一個固定長度的特定類型元素組成的序列,有零個或多個元素。因爲數組的長度是固定的,因此在Go語言中很少直接使用數組。Slice(切片),是可以增長和收縮動態序列,slice功能也更靈活,但是要理解slice工作原理的話需要先理解數組。

+

數組的每個元素可以通過下標來訪問,下標的范圍是從0開始到數組長度減1的位置。內置的len函數將返迴數組中元素的個數。

+
var a [3]int             // array of 3 integers
+fmt.Println(a[0])        // print the first element
+fmt.Println(a[len(a)-1]) // print the last element, a[2]
+
+// Print the indices and elements.
+for i, v := range a {
+    fmt.Printf("%d %d\n", i, v)
+}
+
+// Print the elements only.
+for _, v := range a {
+    fmt.Printf("%d\n", v)
+}
+
+

默認情況下,數組的每個元素都被初始化爲元素類型對應的零值,對於數字類型來説就是0。我們可以使用數組字面值語法用一組值來初始化數組:

+
var q [3]int = [3]int{1, 2, 3}
+var r [3]int = [3]int{1, 2}
+fmt.Println(r[2]) // "0"
+
+

在數組字面值中,如果數組的長度位置出現的是“...”省略號,則表示數組的長度是根據初始化值的個數來計算的。上面q數組的定義可以簡化爲

+
q := [...]int{1, 2, 3}
+fmt.Printf("%T\n", q) // "[3]int"
+
+

數組的長度是數組類型的一個組成部分,因此[3]int和[4]int是兩種不同的數組類型。數組的長度必鬚是常量表達式,因爲數組的長度需要在程序的編譯階段確定。

+
q := [3]int{1, 2, 3}
+q = [4]int{1, 2, 3, 4} // compile error: cannot assign [4]int to [3]int
+
+

我們將會發現,數組、slice、map和結構體字面值的寫法都很相似。上面的形式是直接提順序供初始化值序列,但是也可以指定一個索引和對應值的列表初始化,像下面這樣:

+
type Currency int
+
+const (
+    USD Currency = iota // 美元
+    EUR                 // 歐元
+    GBP                 // 英鎊
+    RMB                 // 人民幣
+)
+
+symbol := [...]string{USD: "$", EUR: "€", GBP: "£", RMB: "¥"}
+
+fmt.Println(RMB, symbol[RMB]) // "3 ""
+
+

這種形式的數組字面值形式中,初始化索引的順序是無關緊要的,而且一些索引可以省略,和前面提到的規則一樣,未知道初始值的元素將用零值初始化。例如,

+
r := [...]int{99: -1}
+
+

定義了一個含有100個原始的數組r,最後一個元素初始化爲-1,其它元素都是用0初始化。

+

如果一個數組的元素類型是可以相互比較的,那麽數組類型也是可以相互比較的,因此我們可以直接通過==比較運算符來比較兩個數組,隻有當兩個數組的所有元素都是相等的時候數組才是相等的。相對的是不相等比較運算符!=。

+
a := [2]int{1, 2}
+b := [...]int{1, 2}
+c := [2]int{1, 3}
+fmt.Println(a == b, a == c, b == c) // "true false false"
+d := [3]int{1, 2}
+fmt.Println(a == d) // compile error: cannot compare [2]int == [3]int
+
+

作爲一個更可信的例子,crypto/sha256包的Sum256函數用於生成一個針對任意的字節類型的slice消息的摘要。消息摘要有256bit大小,因此對應[32]byte數組類型。如果兩個消息摘要是相同的,那麽可以認爲兩個消息本身也是相同(譯註:理論上有HASH碼碰撞的清空,但是實際應用可以基本忽略);如果消息摘要不同,那麽消息本身比如也是不同的。下面的例子用SHA256算法分别生成“x”和“X”兩個信息的摘要:

+
gopl.io/ch4/sha256
+
+import "crypto/sha256"
+
+func main() {
+    c1 := sha256.Sum256([]byte("x"))
+    c2 := sha256.Sum256([]byte("X"))
+    fmt.Printf("%x\n%x\n%t\n%T\n", c1, c2, c1 == c2, c1)
+    // Output:
+    // 2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881
+    // 4b68ab3847feda7d6c62c1fbcbeebfa35eab7351ed5e78f4ddadea5df64b8015
+    // false
+    // [32]uint8
+}
+
+

兩個消息雖然隻有一個字符的差異,但是生成的消息摘要則幾乎有一半的bit位是不同的。需要註意Printf函數的%x參數,它用於指定以十六進製的格式打印全部的數組或slice的的元素,%t參數是用於打印布爾型數據,%T參數是用於顯示一個值對應的數據類型。

+

當調用一個函數的時候,函數的每個調用參數將會被賦值給函數本身的參數變量,所以函數參數變量接收的是一個複製的副本,併不是原始調用的參數。因爲函數參數傳遞的機製導致傳遞大的數組類型將是低效的,併且對數組參數的任何的脩改都是發生在複製的數組上,併不是直接脩改調用時原始的數組變量。在這個方面,Go語言對待數組的方式和其它很多編程語言不同,其它編程語言可能會隱式地將數組作爲引用或指針對象傳入被調用的函數。

+

當然,我們可以顯式地傳入一個數組指針,那樣的話函數對數組的任何脩改都可以直接反饋到調用者。下面的函數用於給[32]byte類型的數組清零:

+
func zero(ptr *[32]byte) {
+    for i := range ptr {
+        ptr[i] = 0
+    }
+}
+
+

其實數組字面值[32]byte{}就可以生成一個32字節的數組。而且每個數組的元素都是零值初始化,也就是0。我們可以將上面的zero函數寫的更簡潔一點:

+
func zero(ptr *[32]byte) {
+    *ptr = [32]byte{}
+}
+
+

雖然通過指針來傳遞數組參數是高效的,而且也允許在函數內部脩改數組的值,但是因爲數組依然是殭化的類型,因爲數組的類型包含長度信息。zero函數併不能接收指向[16]byte類型數組的指針,而且也沒有任何添加或刪除數組元素的方法。由於這些原因,除了像SHA256這類需要處理特定大小數組的函數外,數組依然很少用作函數參數;相反,我們一般使用slice來替代數組。

+

練習 4.1: 編寫一個函數,計算兩個SHA256碼中不同bit的數目。(參考2.6.2節的PopCount函數。)

+

練習 4.2: 編寫一個程序,默認打印標準輸入的以SHA256哈希碼,也可以通過命令行標準參數選擇SHA384或SHA512哈希算法。

@@ -2052,7 +2143,7 @@ diff --git a/ch4/ch4-02.html b/ch4/ch4-02.html index a7363f1..c9b2226 100644 --- a/ch4/ch4-02.html +++ b/ch4/ch4-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2021,6 +2025,10 @@

4.2. 切片

TODO

+

4.2.1. append函數

+

TODO

+

4.2.2. Slice內存技巧

+

TODO

@@ -2052,7 +2060,7 @@ diff --git a/ch4/ch4-03.html b/ch4/ch4-03.html index 74703e8..d6eeeec 100644 --- a/ch4/ch4-03.html +++ b/ch4/ch4-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch4/ch4-04.html b/ch4/ch4-04.html index 059d2b6..f6dd33d 100644 --- a/ch4/ch4-04.html +++ b/ch4/ch4-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2021,6 +2025,12 @@

4.4. 結構體

TODO

+

4.4.1. 結構體面值

+

TODO

+

4.4.2. 結構體比較

+

TODO

+

4.4.3. 結構體嵌入和匿名成員

+

TODO

@@ -2052,7 +2062,7 @@ diff --git a/ch4/ch4-05.html b/ch4/ch4-05.html index 8c160fe..a151838 100644 --- a/ch4/ch4-05.html +++ b/ch4/ch4-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch4/ch4-06.html b/ch4/ch4-06.html index 593e5a1..4458a6a 100644 --- a/ch4/ch4-06.html +++ b/ch4/ch4-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch4/ch4.html b/ch4/ch4.html index 0edd07c..5774a5c 100644 --- a/ch4/ch4.html +++ b/ch4/ch4.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,7 +2024,8 @@

第四章 複合數據類型

-

TODO

+

在第三章我們討論了基本數據類型,它們是用於構建程序中數據結構,是Go語言的世界的原子。在本章,我們將討論複合數據類型,以不同的方式組合基本類型可以構造出複合數據類型。我們主要討論四種類型——數組、slice、map和結構體——同時在本章的最後,我們將演示如何使用結構體來解碼和編碼到對應的JSON格式的數據,併且通過結合使用模闆來生成HTML頁面。

+

數組和結構體是聚合類型;它們的值由許多元素或成員的值組成。數組是由同構的元素組成——每個數組元素都有完全相同的類型——結構體則是由異構的元素組成的。數組和結構體都是固定內存大小的數據結構。相比之下,slice和map則是動態的數據結構,它們將根據需要動態增長。

@@ -2052,7 +2057,7 @@ diff --git a/ch5/ch5-01.html b/ch5/ch5-01.html index 90a49bf..1eeeff6 100644 --- a/ch5/ch5-01.html +++ b/ch5/ch5-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-02.html b/ch5/ch5-02.html index 78813f4..5f2cf9c 100644 --- a/ch5/ch5-02.html +++ b/ch5/ch5-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-03.html b/ch5/ch5-03.html index 058e63c..58ca7aa 100644 --- a/ch5/ch5-03.html +++ b/ch5/ch5-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-04.html b/ch5/ch5-04.html index fb2cbcd..8b02bec 100644 --- a/ch5/ch5-04.html +++ b/ch5/ch5-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-05.html b/ch5/ch5-05.html index 3b96350..058eab4 100644 --- a/ch5/ch5-05.html +++ b/ch5/ch5-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-06.html b/ch5/ch5-06.html index 691b184..365ba1a 100644 --- a/ch5/ch5-06.html +++ b/ch5/ch5-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-07.html b/ch5/ch5-07.html index 08d0850..4f04aa9 100644 --- a/ch5/ch5-07.html +++ b/ch5/ch5-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-08.html b/ch5/ch5-08.html index 6e63c78..1835af3 100644 --- a/ch5/ch5-08.html +++ b/ch5/ch5-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-09.html b/ch5/ch5-09.html index abdb8f1..0176cbb 100644 --- a/ch5/ch5-09.html +++ b/ch5/ch5-09.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2034,7 +2038,7 @@ - +
@@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5-10.html b/ch5/ch5-10.html index 20161e1..b6ac08a 100644 --- a/ch5/ch5-10.html +++ b/ch5/ch5-10.html @@ -5,7 +5,7 @@ - Recover捕穫異常 | Go编程语言 + Recover捕獲異常 | Go编程语言 @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,7 +2023,7 @@
-

5.10. Recover捕穫異常

+

5.10. Recover捕獲異常

TODO

@@ -2052,7 +2056,7 @@ diff --git a/ch5/ch5.html b/ch5/ch5.html index 7aea51f..cb8dc0a 100644 --- a/ch5/ch5.html +++ b/ch5/ch5.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch6/ch6-01.html b/ch6/ch6-01.html index 80a4340..cb17ec5 100644 --- a/ch6/ch6-01.html +++ b/ch6/ch6-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2042,7 +2046,7 @@

上面的代碼里那個附加的參數p,叫做方法的接收器(receiver),早期的面向對象語言留下的遺産將調用一個方法稱爲“向一個對象發送消息”。

在Go語言中,我們併不會像其它語言那樣用this或者self作爲接收器;我們可以任意的選擇接收器的名字。由於接收器的名字經常會被使用到,所以保持其在方法間傳遞時的一致性和簡短性是不錯的主意。這里的建議是可以使用其類型的第一個字母,比如這里使用了Point的首字母p。

-

在方法調用過程中,接收器參數一般會在方法名之前齣現。這和方法聲明是一樣的,都是接收器參數在方法名字之前。下面是例子:

+

在方法調用過程中,接收器參數一般會在方法名之前出現。這和方法聲明是一樣的,都是接收器參數在方法名字之前。下面是例子:

p := Point{1, 2}
 q := Point{4, 6}
 fmt.Println(Distance(p, q)) // "5", function call
@@ -2115,7 +2119,7 @@ fmt.Println(perim.Distance())             // "12
 
 
diff --git a/ch6/ch6-02.html b/ch6/ch6-02.html
index 789e8ce..5e00dc9 100644
--- a/ch6/ch6-02.html
+++ b/ch6/ch6-02.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2028,7 +2032,7 @@

這個方法的名字是(*Point).ScaleBy。這里的括號是必鬚的;沒有括號的話這個表達式可能會被理解爲*(Point.ScaleBy)

在現實的程序里,一般會約定如果Point這個類有一個指針作爲接收器的方法,那麽所有Point的方法都必鬚有一個指針接收器,卽使是那些併不需要這個指針接收器的函數。我們在這里打破了這個約定隻是爲了展示一下兩種方法的異同而已。

-

隻有類型(Point)和指向他們的指針(*Point),纔是可能會齣現在接收器聲明里的兩種接收器。此外,爲了避免歧義,在聲明方法時,如果一個類型名本身是一個指針的話,是不允許其齣現在接收器中的,比如下面這個例子:

+

隻有類型(Point)和指向他們的指針(*Point),才是可能會出現在接收器聲明里的兩種接收器。此外,爲了避免歧義,在聲明方法時,如果一個類型名本身是一個指針的話,是不允許其出現在接收器中的,比如下面這個例子:

type P *int
 func (P) f() { /* ... */ } // compile error: invalid receiver type
 
@@ -2051,7 +2055,7 @@ fmt.Println(p) // "{2, 4}"

不過後面兩種方法有些笨拙。幸運的是,go語言本身在這種地方會幫到我們。如果接收器p是一個Point類型的變量,併且其方法需要一個Point指針作爲接收器,我們可以用下面這種簡短的寫法:

p.ScaleBy(2)
 
-

編譯器會隱式地幫我們用&p去調用ScaleBy這個方法。這種簡寫方法隻適用於“變量”,包括struct里的字段比如p.X,以及array和slice內的元素比如perim[0]。我們不能通過一個無法取到地址的接收器來調用指針方法,比如臨時變量的內存地址就無法穫取得到:

+

編譯器會隱式地幫我們用&p去調用ScaleBy這個方法。這種簡寫方法隻適用於“變量”,包括struct里的字段比如p.X,以及array和slice內的元素比如perim[0]。我們不能通過一個無法取到地址的接收器來調用指針方法,比如臨時變量的內存地址就無法獲取得到:

Point{1, 2}.ScaleBy(2) // compile error: can't take address of Point literal
 

但是我們可以用一個*Point這樣的接收器來調用Point的方法,因爲我們可以通過地址來找到這個變量,隻要用解引用符號*來取到該變量卽可。編譯器在這里也會給我們隱式地插入*這個操作符,所以下面這兩種寫法等價的:

@@ -2090,7 +2094,7 @@ pptr.ScaleBy(2) return list.Value + list.Tail.Sum() } -

當你定義一個允許nil作爲接收器值的方法的類型時,在類型前面的註釋中指齣nil變量代表的意義是很有必要的,就像我們上面例子里做的這樣。

+

當你定義一個允許nil作爲接收器值的方法的類型時,在類型前面的註釋中指出nil變量代表的意義是很有必要的,就像我們上面例子里做的這樣。

下面是net/url包里Values類型定義的一部分。

net/url
 package url
@@ -2159,7 +2163,7 @@ m.Add("item", 
diff --git a/ch6/ch6-03.html b/ch6/ch6-03.html
index bb76db7..0e7d5db 100644
--- a/ch6/ch6-03.html
+++ b/ch6/ch6-03.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2029,7 +2033,7 @@ Color color.RGBA }
-

我們完全可以將ColoredPoint定義爲一個有三個字段的struct,但是我們卻將Point這個類型嵌入到ColoredPoint來提供X和Y這兩個字段。像我們在4.4節中看到的那樣,內嵌可以使我們在定義ColoredPoint時得到一種句法上的簡寫形式,併使其包含Point類型所具有的一切字段,然後再定義一些自己的。如果我們想要的話,我們可以直接認爲通過嵌入的字段就是ColoredPoint自身的字段,而完全不需要在調用時指齣Point,比如下面這樣。

+

我們完全可以將ColoredPoint定義爲一個有三個字段的struct,但是我們卻將Point這個類型嵌入到ColoredPoint來提供X和Y這兩個字段。像我們在4.4節中看到的那樣,內嵌可以使我們在定義ColoredPoint時得到一種句法上的簡寫形式,併使其包含Point類型所具有的一切字段,然後再定義一些自己的。如果我們想要的話,我們可以直接認爲通過嵌入的字段就是ColoredPoint自身的字段,而完全不需要在調用時指出Point,比如下面這樣。

var cp ColoredPoint
 cp.X = 1
 fmt.Println(cp.Point.X) // "1"
@@ -2142,7 +2146,7 @@ fmt.Println(*p.Point, *q.Point) // "{2 2} {2 2}&
 
 
diff --git a/ch6/ch6-04.html b/ch6/ch6-04.html
index d62a248..5408932 100644
--- a/ch6/ch6-04.html
+++ b/ch6/ch6-04.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2110,7 +2114,7 @@ fmt.Printf("%T\n", scale) require(["gitbook"], function(gitbook) { - var config = {"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}}; + var config = {"katex":{},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}}; gitbook.start(config); }); diff --git a/ch6/ch6-05.html b/ch6/ch6-05.html index c1765f6..59d9556 100644 --- a/ch6/ch6-05.html +++ b/ch6/ch6-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2021,7 +2025,7 @@

6.5. 示例: Bit數組

Go語言里的集合一般會用map[T]bool這種形式來表示,T代表元素類型。集合用map類型來表示雖然非常靈活,但我們可以以一種更好的形式來表示它。例如在數據流分析領域,集合元素通常是一個非負整數,集合會包含很多元素,併且集合會經常進行併集、交集操作,這種情況下,bit數組會比map表現更加理想。(譯註:這里再補充一個例子,比如我們執行一個http下載任務,把文件按照16kb一塊劃分爲很多塊,需要有一個全局變量來標識哪些塊下載完成了,這種時候也需要用到bit數組)

-

一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示,每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時,我們纔説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型,併且實現了三個函數來對這個bit數組來進行操作:

+

一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示,每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時,我們才説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型,併且實現了三個函數來對這個bit數組來進行操作:

gopl.io/ch6/intset
 // An IntSet is a set of small non-negative integers.
 // Its zero value represents the empty set.
@@ -2107,9 +2111,9 @@ fmt.Println(x)          // "{[4398046511618 0 65
 func (*IntSet) Copy() *IntSet // return a copy of the set
 

練習6.2: 定義一個變參方法(*IntSet).AddAll(...int),這個方法可以爲一組IntSet值求和,比如s.AddAll(1,2,3)。

-

練習6.3: (*IntSet).UnionWith會用|操作符計算兩個集合的交集,我們再爲IntSet實現另外的幾個函數IntersectWith(交集:元素在A集合B集合均齣現),DifferenceWith(差集:元素齣現在A集合,未齣現在B集合),SymmetricDifference(併差集:元素齣現在A但沒有齣現在B,或者齣現在B沒有齣現在A)。 +

練習6.3: (*IntSet).UnionWith會用|操作符計算兩個集合的交集,我們再爲IntSet實現另外的幾個函數IntersectWith(交集:元素在A集合B集合均出現),DifferenceWith(差集:元素出現在A集合,未出現在B集合),SymmetricDifference(併差集:元素出現在A但沒有出現在B,或者出現在B沒有出現在A)。 練習6.4: 實現一個Elems方法,返迴集合中的所有元素,用於做一些range之類的遍歷操作。

-

練習6.5: 我們這章定義的IntSet里的每個字都是用的uint64類型,但是64位的數值可能在32位的平颱上不高效。脩改程序,使其使用uint類型,這種類型對於32位平颱來説更合適。當然了,這里我們可以不用簡單粗暴地除64,可以定義一個常量來決定是用32還是64,這里你可能會用到平颱的自動判斷的一個智能表達式:32 << (^uint(0) >> 63)

+

練習6.5: 我們這章定義的IntSet里的每個字都是用的uint64類型,但是64位的數值可能在32位的平台上不高效。脩改程序,使其使用uint類型,這種類型對於32位平台來説更合適。當然了,這里我們可以不用簡單粗暴地除64,可以定義一個常量來決定是用32還是64,這里你可能會用到平台的自動判斷的一個智能表達式:32 << (^uint(0) >> 63)

@@ -2141,7 +2145,7 @@ fmt.Println(x) // "{[4398046511618 0 65 diff --git a/ch6/ch6-06.html b/ch6/ch6-06.html index 4779d00..64e6d09 100644 --- a/ch6/ch6-06.html +++ b/ch6/ch6-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2021,7 +2025,7 @@

6.6. 封裝

一個對象的變量或者方法如果對調用方是不可見的話,一般就被定義爲“封裝”。封裝有時候也被叫做信息隱藏,同時也是面向對象編程最關鍵的一個方面。

-

Go語言隻有一種控製可見性的手段:大寫首字母的標識符會從定義它們的包中被導齣,小寫字母的則不會。這種限製包內成員的方式同樣適用於struct或者一個類型的方法。因而如果我們想要封裝一個對象,我們必鬚將其定義爲一個struct。

+

Go語言隻有一種控製可見性的手段:大寫首字母的標識符會從定義它們的包中被導出,小寫字母的則不會。這種限製包內成員的方式同樣適用於struct或者一個類型的方法。因而如果我們想要封裝一個對象,我們必鬚將其定義爲一個struct。

這也就是前面的小節中IntSet被定義爲struct類型的原因,盡管它隻有一個字段:

type IntSet struct {
     words []uint64
@@ -2030,7 +2034,7 @@
 

當然,我們也可以把IntSet定義爲一個slice類型,盡管這樣我們就需要把代碼中所有方法里用到的s.words用*s替換掉了:

type IntSet []uint64
 
-

盡管這個版本的IntSet在本質上是一樣的,他也可以允許其它包中可以直接讀取併編輯這個slice。換句話説,相對*s這個表達式會齣現在所有的包中,s.words隻需要在定義IntSet的包中齣現(譯註:所以還是推薦後者吧的意思)。

+

盡管這個版本的IntSet在本質上是一樣的,他也可以允許其它包中可以直接讀取併編輯這個slice。換句話説,相對*s這個表達式會出現在所有的包中,s.words隻需要在定義IntSet的包中出現(譯註:所以還是推薦後者吧的意思)。

這種基於名字的手段使得在語言中最小的封裝單元是package,而不是像其它語言一樣的類型。一個struct類型的字段對同一個包的所有代碼都有可見性,無論你的代碼是寫在一個函數還是一個方法里。

封裝提供了三方面的優點。首先,因爲調用方不能直接脩改對象的變量值,其隻需要關註少量的語句併且隻要弄懂少量變量的可能的值卽可。

第二,隱藏實現的細節,可以防止調用方依賴那些可能變化的具體實現,這樣使設計包的程序員在不破壞對外的api情況下能得到更大的自由。

@@ -2073,7 +2077,7 @@ func (l *Logger) Prefix() string func (l *Logger) SetPrefix(prefix string)
-

Go的編碼風格不禁止直接導齣字段。當然,一旦進行了導齣,就沒有辦法在保證API兼容的情況下去除對其的導齣,所以在一開始的選擇一定要經過深思熟慮併且要考慮到包內部的一些不變量的保證,未來可能的變化,以及調用方的代碼質量是否會因爲包的一點脩改而變差。

+

Go的編碼風格不禁止直接導出字段。當然,一旦進行了導出,就沒有辦法在保證API兼容的情況下去除對其的導出,所以在一開始的選擇一定要經過深思熟慮併且要考慮到包內部的一些不變量的保證,未來可能的變化,以及調用方的代碼質量是否會因爲包的一點脩改而變差。

封裝併不總是理想的。 雖然封裝在有些情況是必要的,但有時候我們也需要暴露一些內部內容,比如:time.Duration將其表現暴露爲一個int64數字的納秒,使得我們可以用一般的數值操作來對時間進行對比,甚至可以定義這種類型的常量:

const day = 24 * time.Hour
@@ -2113,7 +2117,7 @@ fmt.Println(day.Seconds()) // "86400"
 require(["gitbook"], function(gitbook) {
-    var config = {"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}};
+    var config = {"katex":{},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2}};
     gitbook.start(config);
 });
 
diff --git a/ch6/ch6.html b/ch6/ch6.html
index 5c4f339..d6c10c6 100644
--- a/ch6/ch6.html
+++ b/ch6/ch6.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2039,7 +2043,7 @@
- + @@ -2060,7 +2064,7 @@ diff --git a/ch7/ch7-01.html b/ch7/ch7-01.html index de26466..64d31cb 100644 --- a/ch7/ch7-01.html +++ b/ch7/ch7-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,9 +2024,9 @@

7.1. 接口約定

-

目前爲止,我們看到的類型都是具體的類型。一個具體的類型可以準確的描述它所代表的值併且展示齣對類型本身的一些操作方式就像數字類型的算術操作,切片類型的索引、附加和取范圍操作。具體的類型還可以通過它的方法提供額外的行爲操作。總的來説,當你拿到一個具體的類型時你就知道它的本身是什麽和你可以用它來做什麽。

-

在Go語言中還存在着另外一種類型:接口類型。接口類型是一種抽象的類型。它不會暴露齣它所代表的對象的內部值的結構和這個對象支持的基礎操作的集合;它們隻會展示齣它們自己的方法。也就是説當你有看到一個接口類型的值時,你不知道它是什麽,唯一知道的就是可以通過它的方法來做什麽。

-

在本書中,我們一直使用兩個相似的函數來進行字符串的格式化:fmt.Printf它會把結果寫到標準輸齣和fmt.Sprintf它會把結果以字符串的形式返迴。得益於使用接口,我們不必可悲的因爲返迴結果在使用方式上的一些淺顯不同就必需把格式化這個最睏難的過程複製一份。實際上,這兩個函數都使用了另一個函數fmt.Fprintf來進行封裝。fmt.Fprintf這個函數對它的計算結果會被怎麽使用是完全不知道的。

+

目前爲止,我們看到的類型都是具體的類型。一個具體的類型可以準確的描述它所代表的值併且展示出對類型本身的一些操作方式就像數字類型的算術操作,切片類型的索引、附加和取范圍操作。具體的類型還可以通過它的方法提供額外的行爲操作。總的來説,當你拿到一個具體的類型時你就知道它的本身是什麽和你可以用它來做什麽。

+

在Go語言中還存在着另外一種類型:接口類型。接口類型是一種抽象的類型。它不會暴露出它所代表的對象的內部值的結構和這個對象支持的基礎操作的集合;它們隻會展示出它們自己的方法。也就是説當你有看到一個接口類型的值時,你不知道它是什麽,唯一知道的就是可以通過它的方法來做什麽。

+

在本書中,我們一直使用兩個相似的函數來進行字符串的格式化:fmt.Printf它會把結果寫到標準輸出和fmt.Sprintf它會把結果以字符串的形式返迴。得益於使用接口,我們不必可悲的因爲返迴結果在使用方式上的一些淺顯不同就必需把格式化這個最睏難的過程複製一份。實際上,這兩個函數都使用了另一個函數fmt.Fprintf來進行封裝。fmt.Fprintf這個函數對它的計算結果會被怎麽使用是完全不知道的。

package fmt
 func Fprintf(w io.Writer, format string, args ...interface{}) (int, error)
 func Printf(format string, args ...interface{}) (int, error) {
@@ -2034,7 +2038,7 @@
     return buf.String()
 }
 
-

Fprintf的前綴F表示文件(File)也表明格式化輸齣結果應該被寫入第一個參數提供的文件中。在Printf函數中的第一個參數os.Stdout是*os.File類型;在Sprintf函數中的第一個參數&buf是一個指向可以寫入字節的內存緩衝區,然而它 +

Fprintf的前綴F表示文件(File)也表明格式化輸出結果應該被寫入第一個參數提供的文件中。在Printf函數中的第一個參數os.Stdout是*os.File類型;在Sprintf函數中的第一個參數&buf是一個指向可以寫入字節的內存緩衝區,然而它 併不是一個文件類型盡管它在某種意義上和文件類型相似。

卽使Fprintf函數中的第一個參數也不是一個文件類型。它是io.Writer類型這是一個接口類型定義如下:

package io
@@ -2069,7 +2073,7 @@ c = 0 // reset the c
 fmt.Fprintf(&c, "hello, %s", name)
 fmt.Println(c) // "12", = len("hello, Dolly")
 
-

除了io.Writer這個接口類型,還有另一個對fmt包很重要的接口類型。Fprintf和Fprintln函數向類型提供了一種控製它們值輸齣的途徑。在2.5節中,我們爲Celsius類型提供了一個String方法以便於可以打印成這樣"100°C" ,在6.5節中我們給*IntSet添加一個String方法,這樣集合可以用傳統的符號來進行表示就像"{1 2 3}"。給一個類型定義String方法,可以讓它滿足最廣泛使用之一的接口類型fmt.Stringer:

+

除了io.Writer這個接口類型,還有另一個對fmt包很重要的接口類型。Fprintf和Fprintln函數向類型提供了一種控製它們值輸出的途徑。在2.5節中,我們爲Celsius類型提供了一個String方法以便於可以打印成這樣"100°C" ,在6.5節中我們給*IntSet添加一個String方法,這樣集合可以用傳統的符號來進行表示就像"{1 2 3}"。給一個類型定義String方法,可以讓它滿足最廣泛使用之一的接口類型fmt.Stringer:

package fmt
 // The String method is used to print values passed
 // as an operand to any format that accepts a string
@@ -2115,7 +2119,7 @@ fmt.Println(c) // "12", = len("hello,
 
 
diff --git a/ch7/ch7-02.html b/ch7/ch7-02.html
index 79f141a..cfd03a7 100644
--- a/ch7/ch7-02.html
+++ b/ch7/ch7-02.html
@@ -21,6 +21,10 @@
     
     
         
+        
+        
+    
+        
         
         
     
@@ -44,7 +48,7 @@
     
         
         
-    
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2090,7 +2094,7 @@ diff --git a/ch7/ch7-03.html b/ch7/ch7-03.html index cd90097..02ca809 100644 --- a/ch7/ch7-03.html +++ b/ch7/ch7-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-04.html b/ch7/ch7-04.html index 6370619..9a65cb6 100644 --- a/ch7/ch7-04.html +++ b/ch7/ch7-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-05.html b/ch7/ch7-05.html index 2c87d8b..f048918 100644 --- a/ch7/ch7-05.html +++ b/ch7/ch7-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-06.html b/ch7/ch7-06.html index cfdbf63..b06bc75 100644 --- a/ch7/ch7-06.html +++ b/ch7/ch7-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-07.html b/ch7/ch7-07.html index 284e0d0..104687d 100644 --- a/ch7/ch7-07.html +++ b/ch7/ch7-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-08.html b/ch7/ch7-08.html index 0e46ee3..e81cb0b 100644 --- a/ch7/ch7-08.html +++ b/ch7/ch7-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-09.html b/ch7/ch7-09.html index 3136f8c..f193eeb 100644 --- a/ch7/ch7-09.html +++ b/ch7/ch7-09.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-10.html b/ch7/ch7-10.html index 72e6fa0..57866fb 100644 --- a/ch7/ch7-10.html +++ b/ch7/ch7-10.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-11.html b/ch7/ch7-11.html index 2a56053..e7a9507 100644 --- a/ch7/ch7-11.html +++ b/ch7/ch7-11.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-12.html b/ch7/ch7-12.html index d71c5b0..eb93214 100644 --- a/ch7/ch7-12.html +++ b/ch7/ch7-12.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-13.html b/ch7/ch7-13.html index 8ede09d..2c5dac2 100644 --- a/ch7/ch7-13.html +++ b/ch7/ch7-13.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-14.html b/ch7/ch7-14.html index 7c2b321..bd6bebe 100644 --- a/ch7/ch7-14.html +++ b/ch7/ch7-14.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7-15.html b/ch7/ch7-15.html index d4c61ba..e9c4a73 100644 --- a/ch7/ch7-15.html +++ b/ch7/ch7-15.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch7/ch7.html b/ch7/ch7.html index 5a05f4d..9413938 100644 --- a/ch7/ch7.html +++ b/ch7/ch7.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2054,7 +2058,7 @@ diff --git a/ch8/ch8-01.html b/ch8/ch8-01.html index 2c1dbe2..d86213b 100644 --- a/ch8/ch8-01.html +++ b/ch8/ch8-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,8 +2024,8 @@

8.1. Goroutines

-

在Go語言中,每一個併發的執行單元叫作一個goroutine。設想這里有一個程序有兩個函數,一個函數做一些計算,另一個輸齣一些結果,假設兩個函數沒有相互之間的調用關繫。一個線性的程序會先調用其中的一個函數,然後再調用來一個,但如果是在有兩個甚至更多個goroutine的程序中,對兩個函數的調用就可以在同一時間。我們馬上就會看到這樣的一個程序。

-

如果你使用過操作繫統或者其它語言提供的線程,那麽你可以簡單地把goroutine類比作一個線程,這樣你就可以寫齣一些正確的程序了。goroutine和線程的本質區别會在9.8節中講。

+

在Go語言中,每一個併發的執行單元叫作一個goroutine。設想這里有一個程序有兩個函數,一個函數做一些計算,另一個輸出一些結果,假設兩個函數沒有相互之間的調用關繫。一個線性的程序會先調用其中的一個函數,然後再調用來一個,但如果是在有兩個甚至更多個goroutine的程序中,對兩個函數的調用就可以在同一時間。我們馬上就會看到這樣的一個程序。

+

如果你使用過操作繫統或者其它語言提供的線程,那麽你可以簡單地把goroutine類比作一個線程,這樣你就可以寫出一些正確的程序了。goroutine和線程的本質區别會在9.8節中講。

當一個程序啟動時,其主函數卽在一個單獨的goroutine中運行,我們叫它main goroutine。新的goroutine會用go語句來創建。在語法上,go語句是一個普通的函數或方法調用前加上關鍵字go。go語句會使其語句中的函數在一個新創建的goroutine中運行。而go語句本身會迅速地完成。

f()    // call f(); wait for it to return
 go f() // create a new goroutine that calls f(); don't wait
@@ -2053,7 +2057,7 @@
 

動畵顯示了幾秒之後,fib(45)的調用成功地返迴,併且打印結果: Fibonacci(45) = 1134903170

-

然後主函數返迴。當主函數返迴時,所有的goroutine都會直接打斷,程序退齣。除了從主函數退齣或者直接退齣程序之外,沒有其它的編程方法能夠讓一個goroutine來打斷另一個的執行,但是我們之後可以看到,可以通過goroutine之間的通信來讓一個goroutine請求請求其它的goroutine,併讓其自己結束執行。

+

然後主函數返迴。當主函數返迴時,所有的goroutine都會直接打斷,程序退出。除了從主函數退出或者直接退出程序之外,沒有其它的編程方法能夠讓一個goroutine來打斷另一個的執行,但是我們之後可以看到,可以通過goroutine之間的通信來讓一個goroutine請求請求其它的goroutine,併讓其自己結束執行。

註意這里的兩個獨立的單元是如何進行組合的,spinning和菲波那契的計算。每一個都是寫在獨立的函數中,但是每一個函數都會併發地執行。

@@ -2086,7 +2090,7 @@ Fibonacci(45) = 1134903170

diff --git a/ch8/ch8-02.html b/ch8/ch8-02.html index 2398144..0e5e8aa 100644 --- a/ch8/ch8-02.html +++ b/ch8/ch8-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2062,7 +2066,7 @@

Listen函數創建了一個net.Listener的對象,這個對象會監聽一個網絡端口上到來的連接,在這個例子里我們用的是TCP的localhost:8000端口。listener對象的Accept方法會直接阻塞,直到一個新的連接被創建,然後會返迴一個net.Conn對象來表示這個連接。

handleConn函數會處理一個完整的客戶端連接。在一個for死循環中,將當前的時候用time.Now()函數得到,然後寫到客戶端。由於net.Conn實現了io.Writer接口,我們可以直接向其寫入內容。這個死循環會一直執行,直到寫入失敗。最可能的原因是客戶端主動斷開連接。這種情況下handleConn函數會用defer調用關閉服務器側的連接,然後返迴到主函數,繼續等待下一個連接請求。

-

time.Time.Format方法提供了一種格式化日期和時間信息的方式。它的參數是一個格式化模闆標識如何來格式化時間,而這個格式化模闆限定爲Mon Jan 2 03:04:05PM 2006 UTC-0700。有8個部分(週幾,月份,一個月的第幾天,等等)。可以以任意的形式來組合前面這個模闆;齣現在模闆中的部分會作爲參考來對時間格式進行輸齣。在上面的例子中我們隻用到了小時、分鐘和秒。time包里定義了很多標準時間格式,比如time.RFC1123。在進行格式化的逆向操作time.Parse時,也會用到同樣的策略。(譯註:這是go語言和其它語言相比比較奇葩的一個地方。。你需要記住格式化字符串是1月2日下午3點4分5秒零六年UTC-0700,而不像其它語言那樣Y-m-d H:i:s一樣,當然了這里可以用1234567的方式來記憶,倒是也不麻煩)

+

time.Time.Format方法提供了一種格式化日期和時間信息的方式。它的參數是一個格式化模闆標識如何來格式化時間,而這個格式化模闆限定爲Mon Jan 2 03:04:05PM 2006 UTC-0700。有8個部分(週幾,月份,一個月的第幾天,等等)。可以以任意的形式來組合前面這個模闆;出現在模闆中的部分會作爲參考來對時間格式進行輸出。在上面的例子中我們隻用到了小時、分鐘和秒。time包里定義了很多標準時間格式,比如time.RFC1123。在進行格式化的逆向操作time.Parse時,也會用到同樣的策略。(譯註:這是go語言和其它語言相比比較奇葩的一個地方。。你需要記住格式化字符串是1月2日下午3點4分5秒零六年UTC-0700,而不像其它語言那樣Y-m-d H:i:s一樣,當然了這里可以用1234567的方式來記憶,倒是也不麻煩)

爲了連接例子里的服務器,我們需要一個客戶端程序,比如netcat這個工具(nc命令),這個工具可以用來執行網絡連接操作。

$ go build gopl.io/ch8/clock1
 $ ./clock1 &
@@ -2072,7 +2076,7 @@ $ nc localhost 8000
 13:58:56
 13:58:57
 ^C
-

客戶端將服務器發來的時間顯示了齣來,我們用Control+C來中斷客戶端的執行,在Unix繫統上,你會看到^C這樣的響應。如果你的繫統沒有裝nc這個工具,你可以用telnet來實現同樣的效果,或者也可以用我們下面的這個用go寫的簡單的telnet程序,用net.Dial就可以簡單地創建一個TCP連接:

+

客戶端將服務器發來的時間顯示了出來,我們用Control+C來中斷客戶端的執行,在Unix繫統上,你會看到^C這樣的響應。如果你的繫統沒有裝nc這個工具,你可以用telnet來實現同樣的效果,或者也可以用我們下面的這個用go寫的簡單的telnet程序,用net.Dial就可以簡單地創建一個TCP連接:

gopl.io/ch8/netcat1
 // Netcat1 is a read-only TCP client.
 package main
@@ -2099,7 +2103,7 @@ $ nc localhost 8000
     }
 }
 
-

這個程序會從連接中讀取數據,併將讀到的內容寫到標準輸齣中,直到遇到end of file的條件或者發生錯誤。mustCopy這個函數我們在本節的幾個例子中都會用到。讓我們同時運行兩個客戶端來進行一個測試,這里可以開兩個終端窗口,下面左邊的是其中的一個的輸齣,右邊的是另一個的輸齣:

+

這個程序會從連接中讀取數據,併將讀到的內容寫到標準輸出中,直到遇到end of file的條件或者發生錯誤。mustCopy這個函數我們在本節的幾個例子中都會用到。讓我們同時運行兩個客戶端來進行一個測試,這里可以開兩個終端窗口,下面左邊的是其中的一個的輸出,右邊的是另一個的輸出:

$ go build gopl.io/ch8/netcat1
 $ ./netcat1
 13:58:54                               $ ./netcat1
@@ -2112,7 +2116,7 @@ $ ./netcat1
                                        ^C
 $ killall clock1
 

killall命令是一個Unix命令行工具,可以用給定的進程名來殺掉所有名字匹配的進程。

-

第二個客戶端必鬚等待第一個客戶端完成工作,這樣服務端纔能繼續向後執行;因爲我們這里的服務器程序同一時間隻能處理一個客戶端連接。我們這里對服務端程序做一點小改動,使其支持併發:在handleConn函數調用的地方增加go關鍵字,讓每一次handleConn的調用都進入一個獨立的goroutine。

+

第二個客戶端必鬚等待第一個客戶端完成工作,這樣服務端才能繼續向後執行;因爲我們這里的服務器程序同一時間隻能處理一個客戶端連接。我們這里對服務端程序做一點小改動,使其支持併發:在handleConn函數調用的地方增加go關鍵字,讓每一次handleConn的調用都進入一個獨立的goroutine。

gopl.io/ch8/clock2
 for {
     conn, err := listener.Accept()
@@ -2139,12 +2143,12 @@ $ ./netcat1
 ^C                                     14:03:02
                                        ^C
 $ killall clock2
-

練習8.1: 脩改clock2來支持傳入參數作爲端口號,然後寫一個clockwall的程序,這個程序可以同時與多個clock服務器通信,從多服務器中讀取時間,併且在一個表格中一次顯示所有服務傳迴的結果,類似於你在某些辦公室里看到的時鐘牆。如果你有地理學上分布式的服務器可以用的話,讓這些服務器跑在不同的機器上面;或者在同一颱機器上跑多個不同的實例,這些實例監聽不同的端口,假裝自己在不同的時區。像下面這樣:

+

練習8.1: 脩改clock2來支持傳入參數作爲端口號,然後寫一個clockwall的程序,這個程序可以同時與多個clock服務器通信,從多服務器中讀取時間,併且在一個表格中一次顯示所有服務傳迴的結果,類似於你在某些辦公室里看到的時鐘牆。如果你有地理學上分布式的服務器可以用的話,讓這些服務器跑在不同的機器上面;或者在同一台機器上跑多個不同的實例,這些實例監聽不同的端口,假裝自己在不同的時區。像下面這樣:

$ TZ=US/Eastern    ./clock2 -port 8010 &
 $ TZ=Asia/Tokyo    ./clock2 -port 8020 &
 $ TZ=Europe/London ./clock2 -port 8030 &
 $ clockwall NewYork=localhost:8010 London=localhost:8020 Tokyo=localhost:8030
-

練習8.2: 實現一個併發FTP服務器。服務器應該解析客戶端來的一些命令,比如cd命令來切換目録,ls來列齣目録內文件,get和send來傳輸文件,close來關閉連接。你可以用標準的ftp命令來作爲客戶端,或者也可以自己實現一個。

+

練習8.2: 實現一個併發FTP服務器。服務器應該解析客戶端來的一些命令,比如cd命令來切換目録,ls來列出目録內文件,get和send來傳輸文件,close來關閉連接。你可以用標準的ftp命令來作爲客戶端,或者也可以自己實現一個。

@@ -2176,7 +2180,7 @@ $ clockwall NewYork=localhost:8010 London=localhost:8020 Tokyo=localhost:8030 diff --git a/ch8/ch8-03.html b/ch8/ch8-03.html index ae8e07a..f726bc4 100644 --- a/ch8/ch8-03.html +++ b/ch8/ch8-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch8/ch8-04.html b/ch8/ch8-04.html index 29c158b..b8f3869 100644 --- a/ch8/ch8-04.html +++ b/ch8/ch8-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch8/ch8-05.html b/ch8/ch8-05.html index 686c0bc..bc7b234 100644 --- a/ch8/ch8-05.html +++ b/ch8/ch8-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch8/ch8-06.html b/ch8/ch8-06.html index 837d8ba..4a1a76d 100644 --- a/ch8/ch8-06.html +++ b/ch8/ch8-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2053,7 +2057,7 @@ }

註意這里的crawl所在的goroutine會將link作爲一個顯式的參數傳入,來避免“循環變量快照”的問題(在5.6.1中有講解)。另外註意這里將命令行參數傳入worklist也是在一個另外的goroutine中進行的,這是爲了避免在main goroutine和crawler goroutine中同時向另一個goroutine通過channel發送內容時發生死鎖(因爲另一邊的接收操作還沒有準備好)。當然,這里我們也可以用buffered channel來解決問題,這里不再贅述。

-

現在爬蟲可以高併發地運行起來,併且可以産生一大坨的URL了,不過還是會有倆問題。一個問題是在運行一段時間後可能會齣現在log的錯誤信息里的:

+

現在爬蟲可以高併發地運行起來,併且可以産生一大坨的URL了,不過還是會有倆問題。一個問題是在運行一段時間後可能會出現在log的錯誤信息里的:

$ go build gopl.io/ch8/crawl1
 $ ./crawl1 http://gopl.io/
 http://gopl.io/
@@ -2066,9 +2070,9 @@ https://golang.org/blog/
                                                     too many open files
 ...
 

最初的錯誤信息是一個讓人莫名的DNS査找失敗,卽使這個域名是完全可靠的。而隨後的錯誤信息揭示了原因:這個程序一次性創建了太多網絡連接,超過了每一個進程的打開文件數限製,旣而導致了在調用net.Dial像DNS査找失敗這樣的問題。

-

這個程序實在是太他媽併行了。無窮無盡地併行化併不是什麽好事情,因爲不管怎麽説,你的繫統總是會有一個些限製因素,比如CPU覈心數會限製你的計算負載,比如你的硬盤轉軸和磁頭數限製了你的本地磁盤IO操作頻率,比如你的網絡帶寬限製了你的下載速度上限,或者是你的一個web服務的服務容量上限等等。爲了解決這個問題,我們可以限製併發程序所使用的資源來使之適應自己的運行環境。對於我們的例子來説,最簡單的方法就是限製對links.Extract在同一時間最多不會有超過n次調用,這里的n是fd的limit-20,一般情況下。這個一個夜店里限製客人數目是一個道理,隻有當有客人離開時,纔會允許新的客人進入店內(譯註:作者你個老流氓)。

+

這個程序實在是太他媽併行了。無窮無盡地併行化併不是什麽好事情,因爲不管怎麽説,你的繫統總是會有一個些限製因素,比如CPU覈心數會限製你的計算負載,比如你的硬盤轉軸和磁頭數限製了你的本地磁盤IO操作頻率,比如你的網絡帶寬限製了你的下載速度上限,或者是你的一個web服務的服務容量上限等等。爲了解決這個問題,我們可以限製併發程序所使用的資源來使之適應自己的運行環境。對於我們的例子來説,最簡單的方法就是限製對links.Extract在同一時間最多不會有超過n次調用,這里的n是fd的limit-20,一般情況下。這個一個夜店里限製客人數目是一個道理,隻有當有客人離開時,才會允許新的客人進入店內(譯註:作者你個老流氓)。

我們可以用一個有容量限製的buffered channel來控製併發,這類似於操作繫統里的計數信號量概念。從概念上講,channel里的n個空槽代表n個可以處理內容的token(通行證),從channel里接收一個值會釋放其中的一個token,併且生成一個新的空槽位。這樣保證了在沒有接收介入時最多有n個發送操作。(這里可能我們拿channel里填充的槽來做token更直觀一些,不過還是這樣吧~)。由於channel里的元素類型併不重要,我們用一個零值的struct{}來作爲其元素。

-

讓我們重寫crawl函數,將對links.Extract的調用操作用穫取、釋放token的操作包裹起來,來確保同一時間對其隻有20個調用。信號量數量和其能操作的IO資源數量應保持接近。

+

讓我們重寫crawl函數,將對links.Extract的調用操作用獲取、釋放token的操作包裹起來,來確保同一時間對其隻有20個調用。信號量數量和其能操作的IO資源數量應保持接近。

gopl.io/ch8/crawl2
 // tokens is a counting semaphore used to
 // enforce a limit of 20 concurrent requests.
@@ -2085,7 +2089,7 @@ https://golang.org/blog/
     return list
 }
 
-

第二個問題是這個程序永遠都不會終止,卽使它已經爬到了所有初始鏈接衍生齣的鏈接。(當然,除非你慎重地選擇了合適的初始化URL或者已經實現了練習8.6中的深度限製,你應該還沒有意識到這個問題)。爲了使這個程序能夠終止,我們需要在worklist爲空或者沒有crawl的goroutine在運行時退齣主循環。

+

第二個問題是這個程序永遠都不會終止,卽使它已經爬到了所有初始鏈接衍生出的鏈接。(當然,除非你慎重地選擇了合適的初始化URL或者已經實現了練習8.6中的深度限製,你應該還沒有意識到這個問題)。爲了使這個程序能夠終止,我們需要在worklist爲空或者沒有crawl的goroutine在運行時退出主循環。

func main() {
     worklist := make(chan []string)
     var n int // number of pending sends to worklist
@@ -2113,7 +2117,7 @@ https://golang.org/blog/
 }
 

這個版本中,計算器n對worklist的發送操作數量進行了限製。每一次我們發現有元素需要被發送到worklist時,我們都會對n進行++操作,在向worklist中發送初始的命令行參數之前,我們也進行過一次++操作。這里的操作++是在每啟動一個crawler的goroutine之前。主循環會在n減爲0時終止,這時候説明沒活可榦了。

-

現在這個併發爬蟲會比5.6節中的深度優先蒐索版快上20倍,而且不會齣什麽錯,併且在其完成任務時也會正確地終止。

+

現在這個併發爬蟲會比5.6節中的深度優先蒐索版快上20倍,而且不會出什麽錯,併且在其完成任務時也會正確地終止。

下面的程序是避免過度併發的另一種思路。這個版本使用了原來的crawl函數,但沒有使用計數信號量,取而代之用了20個長活的crawler goroutine,這樣來保證最多20個HTTP請求在併發。

func main() {
     worklist := make(chan []string)  // lists of URLs, may have duplicates
@@ -2148,8 +2152,8 @@ https://golang.org/blog/
 

所有的爬蟲goroutine現在都是被同一個channel-unseenLinks餵飽的了。主goroutine負責拆分它從worklist里拿到的元素,然後把沒有抓過的經由unseenLinks channel發送給一個爬蟲的goroutine。

seen這個map被限定在main goroutine中;也就是説這個map隻能在main goroutine中進行訪問。類似於其它的信息隱藏方式,這樣的約束可以讓我們從一定程度上保證程序的正確性。例如,內部變量不能夠在函數外部被訪問到;變量(§2.3.4)在沒有被轉義的情況下是無法在函數外部訪問的;一個對象的封裝字段無法被該對象的方法以外的方法訪問到。在所有的情況下,信息隱藏都可以幫助我們約束我們的程序,使其不發生意料之外的情況。

crawl函數爬到的鏈接在一個專有的goroutine中被發送到worklist中來避免死鎖。爲了節省空間,這個例子的終止問題我們先不進行詳細闡述了。

-

練習8.6: 爲併發爬蟲增加深度限製。也就是説,如果用戶設置了depth=3,那麽隻有從首頁跳轉三次以內能夠跳到的頁面纔能被抓取到。

-

練習8.7: 完成一個併發程序來創建一個線上網站的本地鏡像,把該站點的所有可達的頁面都抓取到本地硬盤。爲了省事,我們這里可以隻取齣現在該域下的所有頁面(比如golang.org結尾,譯註:外鏈的應該就不算了。)當然了,齣現在頁面里的鏈接你也需要進行一些處理,使其能夠在你的鏡像站點上進行跳轉,而不是指向原始的鏈接。

+

練習8.6: 爲併發爬蟲增加深度限製。也就是説,如果用戶設置了depth=3,那麽隻有從首頁跳轉三次以內能夠跳到的頁面才能被抓取到。

+

練習8.7: 完成一個併發程序來創建一個線上網站的本地鏡像,把該站點的所有可達的頁面都抓取到本地硬盤。爲了省事,我們這里可以隻取出現在該域下的所有頁面(比如golang.org結尾,譯註:外鏈的應該就不算了。)當然了,出現在頁面里的鏈接你也需要進行一些處理,使其能夠在你的鏡像站點上進行跳轉,而不是指向原始的鏈接。

譯註: 拓展閲讀: http://marcio.io/2015/07/handling-1-million-requests-per-minute-with-golang/

@@ -2184,7 +2188,7 @@ https://golang.org/blog/ diff --git a/ch8/ch8-07.html b/ch8/ch8-07.html index 28cdead..3d65708 100644 --- a/ch8/ch8-07.html +++ b/ch8/ch8-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch8/ch8-08.html b/ch8/ch8-08.html index 287c4c5..f8da3bf 100644 --- a/ch8/ch8-08.html +++ b/ch8/ch8-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2046,7 +2050,7 @@ }

ioutil.ReadDir函數會返迴一個os.FileInfo類型的slice,os.FileInfo類型也是os.Stat這個函數的返迴值。對每一個子目録而言,walkDir會遞歸地調用其自身,併且會對每一個文件也遞歸調用。walkDir函數會向fileSizes這個channel發送一條消息。這條消息包含了文件的字節大小。

-

下面的主函數,用了兩個goroutine。後颱的goroutine調用walkDir來遍歷命令行給齣的每一個路徑併最終關閉fileSizes這個channel。主goroutine會對其從channel中接收到的文件大小進行纍加,併輸齣其和。

+

下面的主函數,用了兩個goroutine。後台的goroutine調用walkDir來遍歷命令行給出的每一個路徑併最終關閉fileSizes這個channel。主goroutine會對其從channel中接收到的文件大小進行纍加,併輸出其和。

package main
 
 import (
@@ -2091,8 +2095,8 @@
 
$ go build gopl.io/ch8/du1
 $ ./du1 $HOME /usr /bin /etc
 213201 files  62.7 GB
-

如果在運行的時候能夠讓我們知道處理進度的話想必更好。但是,如果簡單地把printDiskUsage函數調用移動到循環里會導致其打印齣成百上韆的輸齣。

-

下面這個du的變種會間歇打印內容,不過隻有在調用時提供了-v的flag纔會顯示程序進度信息。在roots目録上循環的後颱goroutine在這里保持不變。主goroutine現在使用了計時器來每500ms生成事件,然後用select語句來等待文件大小的消息來更新總大小數據,或者一個計時器的事件來打印當前的總大小數據。如果-v的flag在運行時沒有傳入的話,tick這個channel會保持爲nil,這樣在select里的case也就相當於被禁用了。

+

如果在運行的時候能夠讓我們知道處理進度的話想必更好。但是,如果簡單地把printDiskUsage函數調用移動到循環里會導致其打印出成百上韆的輸出。

+

下面這個du的變種會間歇打印內容,不過隻有在調用時提供了-v的flag才會顯示程序進度信息。在roots目録上循環的後台goroutine在這里保持不變。主goroutine現在使用了計時器來每500ms生成事件,然後用select語句來等待文件大小的消息來更新總大小數據,或者一個計時器的事件來打印當前的總大小數據。如果-v的flag在運行時沒有傳入的話,tick這個channel會保持爲nil,這樣在select里的case也就相當於被禁用了。

gopl.io/ch8/du2
 var verbose = flag.Bool("v", false, "show verbose progress messages")
 
@@ -2121,7 +2125,7 @@ loop:
     printDiskUsage(nfiles, nbytes) // final totals
 }
 
-

由於我們的程序不再使用range循環,第一個select的case必鬚顯式地判斷fileSizes的channel是不是已經被關閉了,這里可以用到channel接收的二值形式。如果channel已經被關閉了的話,程序會直接退齣循環。這里的break語句用到了標籤break,這樣可以同時終結select和for兩個循環;如果沒有用標籤就break的話隻會退齣內層的select循環,而外層的for循環會使之進入下一輪select循環。

+

由於我們的程序不再使用range循環,第一個select的case必鬚顯式地判斷fileSizes的channel是不是已經被關閉了,這里可以用到channel接收的二值形式。如果channel已經被關閉了的話,程序會直接退出循環。這里的break語句用到了標籤break,這樣可以同時終結select和for兩個循環;如果沒有用標籤就break的話隻會退出內層的select循環,而外層的for循環會使之進入下一輪select循環。

現在程序會悠閒地爲我們打印更新流:

$ go build gopl.io/ch8/du2
 $ ./du2 -v $HOME /usr /bin /etc
@@ -2131,7 +2135,7 @@ $ ./du2 -v $HOME /usr /bin /etc
 127169 files  52.9 GB
 175931 files  62.2 GB
 213201 files  62.7 GB
-

然而這個程序還是會花上很長時間纔會結束。無法對walkDir做併行化處理沒什麽别的原因,無非是因爲磁盤繫統併行限製。下面這個第三個版本的du,會對每一個walkDir的調用創建一個新的goroutine。它使用sync.WaitGroup (§8.5)來對仍舊活躍的walkDir調用進行計數,另一個goroutine會在計數器減爲零的時候將fileSizes這個channel關閉。

+

然而這個程序還是會花上很長時間才會結束。無法對walkDir做併行化處理沒什麽别的原因,無非是因爲磁盤繫統併行限製。下面這個第三個版本的du,會對每一個walkDir的調用創建一個新的goroutine。它使用sync.WaitGroup (§8.5)來對仍舊活躍的walkDir調用進行計數,另一個goroutine會在計數器減爲零的時候將fileSizes這個channel關閉。

gopl.io/ch8/du3
 func main() {
     // ...determine roots...
@@ -2173,7 +2177,7 @@ $ ./du2 -v $HOME /usr /bin /etc
     // ...
 

這個版本比之前那個快了好幾倍,盡管其具體效率還是和你的運行環境,機器配置相關。

-

練習8.9: 編寫一個du工具,每隔一段時間將root目録下的目録大小計算併顯示齣來。

+

練習8.9: 編寫一個du工具,每隔一段時間將root目録下的目録大小計算併顯示出來。

@@ -2187,7 +2191,7 @@ $ ./du2 -v $HOME /usr /bin /etc - +
@@ -2205,7 +2209,7 @@ $ ./du2 -v $HOME /usr /bin /etc diff --git a/ch8/ch8-09.html b/ch8/ch8-09.html index 6ac3114..9c2b8bf 100644 --- a/ch8/ch8-09.html +++ b/ch8/ch8-09.html @@ -5,7 +5,7 @@ - 併發的退齣 | Go编程语言 + 併發的退出 | Go编程语言 @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2019,12 +2023,12 @@
-

8.9. 併發的退齣

+

8.9. 併發的退出

有時候我們需要通知goroutine停止它正在榦的事情,比如一個正在執行計算的web服務,然而它的客戶端已經斷開了和服務端的連接。

-

Go語言併沒有提供在一個goroutine中終止另一個goroutine的方法,由於這樣會導致goroutine之間的共享變量落在未定義的狀態上。在8.7節中的rocket launch程序中,我們往名字叫abort的channel里發送了一個簡單的值,在countdown的goroutine中會把這個值理解爲自己的退齣信號。但是如果我們想要退齣兩個或者任意多個goroutine怎麽辦呢?

-

一種可能的手段是向abort的channel里發送和goroutine數目一樣多的事件來退齣它們。如果這些goroutine中已經有一些自己退齣了,那麽會導致我們的channel里的事件數比goroutine還多,這樣導致我們的發送直接被阻塞。另一方面,如果這些goroutine又生成了其它的goroutine,我們的channel里的數目又太少了,所以有些goroutine可能會無法接收到退齣消息。一般情況下我們是很難知道在某一個時刻具體有多少個goroutine在運行着的。另外,當一個goroutine從abort channel中接收到一個值的時候,他會消費掉這個值,這樣其它的goroutine就沒法看到這條信息。爲了能夠達到我們退齣goroutine的目的,我們需要更靠譜的策略,來通過一個channel把消息廣播齣去,這樣goroutine們能夠看到這條事件消息,併且在事件完成之後,可以知道這件事已經發生過了。

+

Go語言併沒有提供在一個goroutine中終止另一個goroutine的方法,由於這樣會導致goroutine之間的共享變量落在未定義的狀態上。在8.7節中的rocket launch程序中,我們往名字叫abort的channel里發送了一個簡單的值,在countdown的goroutine中會把這個值理解爲自己的退出信號。但是如果我們想要退出兩個或者任意多個goroutine怎麽辦呢?

+

一種可能的手段是向abort的channel里發送和goroutine數目一樣多的事件來退出它們。如果這些goroutine中已經有一些自己退出了,那麽會導致我們的channel里的事件數比goroutine還多,這樣導致我們的發送直接被阻塞。另一方面,如果這些goroutine又生成了其它的goroutine,我們的channel里的數目又太少了,所以有些goroutine可能會無法接收到退出消息。一般情況下我們是很難知道在某一個時刻具體有多少個goroutine在運行着的。另外,當一個goroutine從abort channel中接收到一個值的時候,他會消費掉這個值,這樣其它的goroutine就沒法看到這條信息。爲了能夠達到我們退出goroutine的目的,我們需要更靠譜的策略,來通過一個channel把消息廣播出去,這樣goroutine們能夠看到這條事件消息,併且在事件完成之後,可以知道這件事已經發生過了。

迴憶一下我們關閉了一個channel併且被消費掉了所有已發送的值,操作channel之後的代碼可以立卽被執行,併且會産生零值。我們可以將這個機製擴展一下,來作爲我們的廣播機製:不要向channel發送值,而是用關閉一個channel來進行廣播。

-

隻要一些小脩改,我們就可以把退齣邏輯加入到前一節的du程序。首先,我們創建一個退齣的channel,這個channel不會向其中發送任何值,但其所在的閉包內要寫明程序需要退齣。我們同時還定義了一個工具函數,cancelled,這個函數在被調用的時候會輪詢退齣狀態。

+

隻要一些小脩改,我們就可以把退出邏輯加入到前一節的du程序。首先,我們創建一個退出的channel,這個channel不會向其中發送任何值,但其所在的閉包內要寫明程序需要退出。我們同時還定義了一個工具函數,cancelled,這個函數在被調用的時候會輪詢退出狀態。

gopl.io/ch8/du4
 var done = make(chan struct{})
 
@@ -2037,7 +2041,7 @@
     }
 }
 
-

下面我們創建一個從標準輸入流中讀取內容的goroutine,這是一個比較典型的連接到終端的程序。每當有輸入被讀到(比如用戶按了迴車鍵),這個goroutine就會把取消消息通過關閉done的channel廣播齣去。

+

下面我們創建一個從標準輸入流中讀取內容的goroutine,這是一個比較典型的連接到終端的程序。每當有輸入被讀到(比如用戶按了迴車鍵),這個goroutine就會把取消消息通過關閉done的channel廣播出去。

// Cancel traversal when input is detected.
 go func() {
     os.Stdin.Read(make([]byte, 1)) // read a single byte
@@ -2070,7 +2074,7 @@
 }
 

在walkDir函數的循環中我們對取消狀態進行輪詢可以帶來明顯的益處,可以避免在取消事件發生時還去創建goroutine。取消本身是有一些代價的;想要快速的響應需要對程序邏輯進行侵入式的脩改。確保在取消發生之後不要有代價太大的操作可能會需要脩改你代碼里的很多地方,但是在一些重要的地方去檢査取消事件也確實能帶來很大的好處。

-

對這個程序的一個簡單的性能分析可以揭示瓶頸在dirents函數中穫取一個信號量。下面的select可以讓這種操作可以被取消,併且可以將取消時的延遲從幾百毫秒降低到幾十毫秒。

+

對這個程序的一個簡單的性能分析可以揭示瓶頸在dirents函數中獲取一個信號量。下面的select可以讓這種操作可以被取消,併且可以將取消時的延遲從幾百毫秒降低到幾十毫秒。

func dirents(dir string) []os.FileInfo {
     select {
     case sema <- struct{}{}: // acquire token
@@ -2081,7 +2085,7 @@
     // ...read directory...
 }
 
-

現在當取消發生時,所有後颱的goroutine都會迅速停止併且主函數會返迴。當然,當主函數返迴時,一個程序會退齣,而我們又無法在主函數退齣的時候確認其已經釋放了所有的資源(譯註:因爲程序都退齣了,你的代碼都沒法執行了)。這里有一個方便的竅門我們可以一用:取代掉直接從主函數返迴,我們調用一個panic,然後runtime會把每一個goroutine的棧dump下來。如果main goroutine是唯一一個剩下的goroutine的話,他會清理掉自己的一切資源。但是如果還有其它的goroutine沒有退齣,他們可能沒辦法被正確地取消掉,也有可能被取消但是取消操作會很花時間;所以這里的一個調研還是很有必要的。我們用panic來穫取到足夠的信息來驗證我們上面的判斷,看看最終到底是什麽樣的情況。

+

現在當取消發生時,所有後台的goroutine都會迅速停止併且主函數會返迴。當然,當主函數返迴時,一個程序會退出,而我們又無法在主函數退出的時候確認其已經釋放了所有的資源(譯註:因爲程序都退出了,你的代碼都沒法執行了)。這里有一個方便的竅門我們可以一用:取代掉直接從主函數返迴,我們調用一個panic,然後runtime會把每一個goroutine的棧dump下來。如果main goroutine是唯一一個剩下的goroutine的話,他會清理掉自己的一切資源。但是如果還有其它的goroutine沒有退出,他們可能沒辦法被正確地取消掉,也有可能被取消但是取消操作會很花時間;所以這里的一個調研還是很有必要的。我們用panic來獲取到足夠的信息來驗證我們上面的判斷,看看最終到底是什麽樣的情況。

練習8.10: HTTP請求可能會因http.Request結構體中Cancel channel的關閉而取消。脩改8.6節中的web crawler來支持取消http請求。

提示: http.Get併沒有提供方便地定製一個請求的方法。你可以用http.NewRequest來取而代之,設置它的Cancel字段,然後用http.DefaultClient.Do(req)來進行這個http請求。

練習8.11:緊接着8.4.4中的mirroredQuery流程,實現一個併發請求url的fetch的變種。當第一個請求返迴時,直接取消其它的請求。

@@ -2116,7 +2120,7 @@ diff --git a/ch8/ch8-10.html b/ch8/ch8-10.html index 24fed3b..46826a6 100644 --- a/ch8/ch8-10.html +++ b/ch8/ch8-10.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2039,7 +2043,7 @@ } } -

然後是broadcaster的goroutine。他的內部變量clients會記録當前建立連接的客戶端集合。其記録的內容是每一個客戶端的消息發齣channel的"資格"信息。

+

然後是broadcaster的goroutine。他的內部變量clients會記録當前建立連接的客戶端集合。其記録的內容是每一個客戶端的消息發出channel的"資格"信息。

type client chan<- string // an outgoing message channel
 
 var (
@@ -2068,8 +2072,8 @@
     }
 }
 
-

broadcaster監聽來自全局的entering和leaving的channel來穫知客戶端的到來和離開事件。當其接收到其中的一個事件時,會更新clients集合,當該事件是離開行爲時,它會關閉客戶端的消息發齣channel。broadcaster也會監聽全局的消息channel,所有的客戶端都會向這個channel中發送消息。當broadcaster接收到什麽消息時,就會將其廣播至所有連接到服務端的客戶端。

-

現在讓我們看看每一個客戶端的goroutine。handleConn函數會爲它的客戶端創建一個消息發齣channel併通過entering channel來通知客戶端的到來。然後它會讀取客戶端發來的每一行文本,併通過全局的消息channel來將這些文本發送齣去,併爲每條消息帶上發送者的前綴來標明消息身份。當客戶端發送完畢後,handleConn會通過leaving這個channel來通知客戶端的離開併關閉連接。

+

broadcaster監聽來自全局的entering和leaving的channel來獲知客戶端的到來和離開事件。當其接收到其中的一個事件時,會更新clients集合,當該事件是離開行爲時,它會關閉客戶端的消息發出channel。broadcaster也會監聽全局的消息channel,所有的客戶端都會向這個channel中發送消息。當broadcaster接收到什麽消息時,就會將其廣播至所有連接到服務端的客戶端。

+

現在讓我們看看每一個客戶端的goroutine。handleConn函數會爲它的客戶端創建一個消息發出channel併通過entering channel來通知客戶端的到來。然後它會讀取客戶端發來的每一行文本,併通過全局的消息channel來將這些文本發送出去,併爲每條消息帶上發送者的前綴來標明消息身份。當客戶端發送完畢後,handleConn會通過leaving這個channel來通知客戶端的離開併關閉連接。

func handleConn(conn net.Conn) {
     ch := make(chan string) // outgoing client messages
     go clientWriter(conn, ch)
@@ -2096,7 +2100,7 @@
     }
 }
 
-

另外,handleConn爲每一個客戶端創建了一個clientWriter的goroutine來接收向客戶端發齣消息channel中發送的廣播消息,併將它們寫入到客戶端的網絡連接。客戶端的讀取方循環會在broadcaster接收到leaving通知併關閉了channel後終止。

+

另外,handleConn爲每一個客戶端創建了一個clientWriter的goroutine來接收向客戶端發出消息channel中發送的廣播消息,併將它們寫入到客戶端的網絡連接。客戶端的讀取方循環會在broadcaster接收到leaving通知併關閉了channel後終止。

下面演示的是當服務器有兩個活動的客戶端連接,併且在兩個窗口中運行的情況,使用netcat來聊天:

$ go build gopl.io/ch8/chat
 $ go build gopl.io/ch8/netcat3
@@ -2121,7 +2125,7 @@ You are 127.0.0.1:64216               127.0.0.1:64216 has arrived
 

練習8.12: 使broadcaster能夠將arrival事件通知當前所有的客戶端。爲了達成這個目的,你需要有一個客戶端的集合,併且在entering和leaving的channel中記録客戶端的名字。 練習8.13: 使聊天服務器能夠斷開空閒的客戶端連接,比如最近五分鐘之後沒有發送任何消息的那些客戶端。提示:可以在其它goroutine中調用conn.Close()來解除Read調用,就像input.Scanner()所做的那樣。 練習8.14: 脩改聊天服務器的網絡協議這樣每一個客戶端就可以在entering時可以提供它們的名字。將消息前綴由之前的網絡地址改爲這個名字。 -練習8.15: 如果一個客戶端沒有及時地讀取數據可能會導致所有的客戶端被阻塞。脩改broadcaster來跳過一條消息,而不是等待這個客戶端一直到其準備好寫。或者爲每一個客戶端的消息發齣channel建立緩衝區,這樣大部分的消息便不會被丟掉;broadcaster應該用一個非阻塞的send向這個channel中發消息。

+練習8.15: 如果一個客戶端沒有及時地讀取數據可能會導致所有的客戶端被阻塞。脩改broadcaster來跳過一條消息,而不是等待這個客戶端一直到其準備好寫。或者爲每一個客戶端的消息發出channel建立緩衝區,這樣大部分的消息便不會被丟掉;broadcaster應該用一個非阻塞的send向這個channel中發消息。

@@ -2132,7 +2136,7 @@ You are 127.0.0.1:64216 127.0.0.1:64216 has arrived
- + @@ -2153,7 +2157,7 @@ You are 127.0.0.1:64216 127.0.0.1:64216 has arrived diff --git a/ch8/ch8.html b/ch8/ch8.html index f0ab374..471b7ed 100644 --- a/ch8/ch8.html +++ b/ch8/ch8.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2020,7 +2024,7 @@

第八章 Goroutines和Channels

-

併發程序指的是同時做好幾件事情的程序,隨着硬件的發展,併發程序顯得越來越重要。Web服務器會一次處理成韆上萬的請求。平闆電腦和手機app在渲染用戶動畵的同時,還會後颱執行各種計算任務和網絡請求。卽使是傳統的批處理問題--讀取數據,計算,寫輸齣--現在也會用併發來隱藏掉I/O的操作延遲充分利用現代計算機設備的多覈,盡管計算機的性能每年都在增長,但併不是線性。

+

併發程序指的是同時做好幾件事情的程序,隨着硬件的發展,併發程序顯得越來越重要。Web服務器會一次處理成韆上萬的請求。平闆電腦和手機app在渲染用戶動畵的同時,還會後台執行各種計算任務和網絡請求。卽使是傳統的批處理問題--讀取數據,計算,寫輸出--現在也會用併發來隱藏掉I/O的操作延遲充分利用現代計算機設備的多覈,盡管計算機的性能每年都在增長,但併不是線性。

Go語言中的併發程序可以用兩種手段來實現。這一章會講解goroutine和channel,其支持“順序進程通信”(communicating sequential processes)或被簡稱爲CSP。CSP是一個現代的併發編程模型,在這種編程模型中值會在不同的運行實例(goroutine)中傳遞,盡管大多數情況下被限製在單一實例中。第9章會覆蓋到更爲傳統的併發模型:多線程共享內存,如果你在其它的主流語言中寫過併發程序的話可能會更熟悉一些。第9章同時會講一些本章不會深入的併發程序帶來的重要風險和陷阱。

盡管Go對併發的支持是衆多強力特性之一,但大多數情況下跟蹤併發程序還是很睏難,併且在線性程序中我們的直覺往往還會讓我們誤入歧途。如果這是你第一次接觸併發,那麽我推薦你稍微多花一些時間來思考這兩個章節中的樣例。

@@ -2054,7 +2058,7 @@ diff --git a/ch9/ch9-01.html b/ch9/ch9-01.html index 35e71c1..9939581 100644 --- a/ch9/ch9-01.html +++ b/ch9/ch9-01.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-02.html b/ch9/ch9-02.html index a36e941..02dd298 100644 --- a/ch9/ch9-02.html +++ b/ch9/ch9-02.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-03.html b/ch9/ch9-03.html index db0490c..7d38f2c 100644 --- a/ch9/ch9-03.html +++ b/ch9/ch9-03.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-04.html b/ch9/ch9-04.html index 7787db2..4b0a221 100644 --- a/ch9/ch9-04.html +++ b/ch9/ch9-04.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-05.html b/ch9/ch9-05.html index d203f03..3ffd737 100644 --- a/ch9/ch9-05.html +++ b/ch9/ch9-05.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-06.html b/ch9/ch9-06.html index b65ea05..b8e96d7 100644 --- a/ch9/ch9-06.html +++ b/ch9/ch9-06.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-07.html b/ch9/ch9-07.html index e352d56..1a049b7 100644 --- a/ch9/ch9-07.html +++ b/ch9/ch9-07.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9-08.html b/ch9/ch9-08.html index 0ab42c0..949c2ea 100644 --- a/ch9/ch9-08.html +++ b/ch9/ch9-08.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/ch9/ch9.html b/ch9/ch9.html index 49ff5d5..216499d 100644 --- a/ch9/ch9.html +++ b/ch9/ch9.html @@ -21,6 +21,10 @@ + + + + @@ -44,7 +48,7 @@ -
+
@@ -238,7 +242,7 @@ 1.5. - 穫取URL + 獲取URL @@ -253,7 +257,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -802,7 +806,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1315,7 +1319,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1834,7 +1838,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2052,7 +2056,7 @@ diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..784276a3cbfb3d3b93c974594ffaf70514ab0eb7 GIT binary patch literal 71656 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f1e0be2028f8c9ccb9ca055f9091fd8495c2975 GIT binary patch literal 71428 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4dded4733b3fd85fdb1c00352e30d8efa3f1a426 GIT binary patch literal 40200 zcmZs9QHoLH#Z~11fb6S(Hr)SUdZSdYpu)iXk2LpBR{jS=aX)Qn z6FVbE0086&008y{06?wR7WfiO++7I)0NC(1gpXYOcW2LON@0svs8002zd z8tUeqg^|lYZuUPe0P=r8w6OIu2LRx^0D!P10N~mYP7Hp>(#**8UtZ0BKL7Fq*ntap zB`p6b|LLOt$^Ydb1(kqAv9xpb{C5u0fBNo!XTkl8OS)w1VDirow(6fA@jpaN58c=q zdH%}_RQHcZ_#c2}fWz&L?92dwl=y#l`FCFko5f<4$`%*Yrh3M6s>+XDdnkK^}uHl8R_WrY9&B7zWN?%QWLHZ~Lhij9f6 z1H;(m1#<}Tr@e%claaFPXSV8YH;5?mo$b&I3_R?c(>$Jb(VDQJuMZNSMvRR0Ure{; zZfOu9#L*ugi=nbIp$K%Sx4>}ZA%rRYDr1_+Jv>cKYIpvClobAe>J$V*$d;af>%i(9 zLS$Of@IPEXjq5R&1%U?U<`(Y!?i@l8HhU7+50xOGRMP!yVU!qSn9uurkc0b#=wsm> zeIeFGdEQ#S`*?>cvU9m+Tj>c6wPDbIS;Q3r@6f<1WoD@VlBwL{iR|;0STTU1(V|tZ zOVmdK-h7D}rb@8{YDd-~{%#qV(5^OcJjZv>Yaq;=I}}N=Yf%up(YWmb5jR*|w+~QZ z7qY0&EyxDg9&?*-CwQ*n9Q5`B~Tr`J1=PLwH1B#|mhe57zK(aBpDo?5#dW)3oIa4| zZZ|!0HX-bWWYF=V@cFR*(Q|G#-bp&qVw=J*oapA&K(~kBs18|IrQh_a3<{` zn0@eTNd4UYVp{Z1=TT$(#z4dc*;V?iw*0?;Vtdg>QdI~Qu-ERh%{JM3LSpcWi#_b{?k)Lh>gBUl>scRai>>sqQRL^$(~PWhl0=YC4rop}A6dcbR~*RISU4HDW@> zW*mO}=JkhU3*6UYFZ@&n3qshtVHgv6V|nTrDZA25o%q5Lr{GNehsG7BOPy~?-Lx%7 zr5RjRf){CN^(Z^#WJ5fkG4`lcsl;;NkS#-6B~0u3Pf=k)Qnw2{Pwd;p4vT4Lk-1f)m-XIff(HH${=Z+eXck*+ zbee$aRCNAur6^2D9RCvCTjKf36Lzk{N;Yjwoc14F!pLR=zKZSR5^^~O`yCP%Dj_N^ zHX9ca6J-z|pMKQK@@{Yg&EI^`tI3<7>}#vyjrG5FCIk3LJXKpTL>g~&^$S2ZHp#+EhWq_^o(Q1WYebL zU`AKUO3<5eG!x9^*A1ZKVi}W#(08JY1Q9MWqqH;f_g@-!QWe>GoUc5|bn9!cq6$xr z9u27s1J%`p);jm@m}7{gSv)|owC>jV>jhnfPPJPc%vP2ob;&iN;l(&A=0EXM@HeHt z;{{G+YhzTkkF*w7Fg=0nMe$ThdN^8&fA6UVAGZ_vpkG3~x!#h_>CCanJ?}V?{S-#B zA@QgN4=fYw43FldC(zAw71U&N9=Pca=?1;`H|Eo3D6bX$t(h+&TF9>JOnF$V6JW?IE(J zQP+g~d;L1Czn>a566x+Y5OvPEdV@Aja}aY`jr>tM8A>mbLCM3I7?9}VqGNijGPyM# zCnTezdvWHfTtgL9C?}*SV|9^){u;QrlrWjJ*)vGb#HO4(t#<@4()G2zH;6=0GilKi z&Ct%4lTJR!r5tJY6esddK2l?uSe2V*A8%4q)%i-0q0kB_77Cw${FcV%buFvvC;7dj z1}>LoFgWsRc-Yyd(asd8JBLUf@oRYe5d^$>T=lnUdA;KPkafJzee*Utgy$$eJO*Vs!74n-c zl)URfsFpai?AdX(8Dq3CaYu-23o11~{PUL!jb|p3mJ#1{mFetn`q@6}Yem!mOrADNZfc+@@E3 zgoPvaib!m}IO_-fC5Ad-L$r<&^$Rj0sM_p0aJKhIuHCa+MqTG7-dDfBO>JJfH4m@r_f_-2H(sa1iNan#lr zJ9KrCi}i(){;V!Du`&)C6rpDQXgt@y^BPzqlN?F*Tss;T&Gut{>>B>qaY6R=#U)J2 zwRNSlQ}o=N4ZcI`i8J{5PJH7{>AD!@)&O?ZT+s@Ll^&5a=KD%*F-sLt(@2^D0&2ge zumWZQvfz1@J>?!70B?&ZF8)4t7tAZh-~IIeHl|bdK8z`&J2Dqc&?zHC=24KgQC#rX zjKMvc6GqRzZ1BF-e^xjbOwoT7H3fN4~7Gljv&lvia7q$Ncj+pch#rbKZXCwyJXODlvZ*kdQ zRk`v<%!339_8HI+$$ItzSbi$m{s0;$Ig|hD#=D(^xEDWQhfr~ zuvrmycxzNqU|_;<0SOl=@E=lSNcP7D<_F7b!>`?rz+w*)6h#7?NEm>X2zJc+9xq+35J%Bxc^M%)h-$$@Th)Xy^ z1Wr^(^hE4ToKGT5GD31i%1atgdPF8mmQHp=E=*oR{z4&65l%5dNl58S1xXc4bw*81 zolXNz6F~DtOHQju>rMNI4w%l6u7@6--j#lW0hPg=;exS{iJB>r>5f^Rxrqgv#h&Gc zHI{Xc^@WX*O_i;S?TVe5J%l}zeT@UaAz`z9yk8 z(I;^v2`L#Vr7G1S^(9R&9U|Q!eIkP?qb<`WODP*E2asczvzKd<`<7Rf_m%Ha097DW zXi&IOq*ruQY*K<&QdY`W##D}1{!lSi=~0DLRaM#Mi9T64g4< z4%fcZG1j@!_0+A?J=2HOXVur$57V#FU()|Jz&8*#ur$at=rY(agfyf#bTynZLN!V> z8Z*W>b~o-bku}*cJV62Xzl}Pj#h{Pc)$pR%rBKb8DCp!? z@KErWb$xw0icNAK2wP`tY~-2}w~Kd2Q`ZJFC9*>E0D}xfOeYKxV@!_%lUx-JpvRQ$ zT1zK|T?0RinjR)!Uj_HQ9k!i)&8@guUtgx~d;R?7@4K-q>#m--jew!x;*%SzhnVVPtc4_nQ<- z8@_{hu_XhIE#<4T`5&2xfBjq3fv)1^S~ld9N18101hYx9H1i^`IIx+LUP;+|&dF{_ z7%RC9YE(s)Sx|{>5k9KeC)6Zs-gdb_SdGA8v|j7&A#IW@Mtl&NVih42_SqHpSI8Vi zG-TsIp<}QkhWF`~3iX%(B_Xjbc0V*z!UQ&Cr7KFAc(97mEo$O8r1H^=Rze-51v;ZK{s5K%PcRa0zwzHteD;5?#m$lp076L}P-5zF3y_}~+rZA^62LPRYtI?At! z%d}chrmnrv(A{sX;oWO3hEwdz0~&3hn{k(1z|0lCivVSb6*F zR>eA2{}uAu9s`r9M+jonRKHk(Z~-z|D4tM}0g94pdeVb!!{*KoCd)=JLoqNyiA1n- zR$XEkQGW7p;vEGbPhb~Vsl?J*LTeE%zji)WB+;N@lWQ0TYrgH*LO7(vm!?e_OPF+N zSg22o)6)@&$>5BcSkEOjG$Uxaa{MkQw9IfREqmy9Ymliz-C9rXBk0=XMarQ+!aF~U zQEgg)Kh5$*-trIm2?l%3fW?a%DXwyiex@(?l8pJ`g^SLT*X$NCrmr=-KV>n=I8r%U z>6-au)@R5G*AHRJaSLe-&%eEI5HR5FTrw%-lyP>*+_&b7nXJeKB@w&hl$YyZF?yv^ zP#aygV1KKe!vA)F>OF{YY*kE;?9U(T=})K3s6Xq7&YJDLUdvtQXza@l?jeALzwwiC zxR_U?H&H>LxRK6IAZKJ7M0J%0!(qIk>T3&Pq@D^?C&*G?smUx;%E(XUZ_L-0HTBij zf&#H!XPGvW)2}IZlbTGkJ>vRsb@a8J9GH4q+j`UegFX2QSE<~^u@+znqK{=oQ;UJ7 zEg!?c>BgpfEtZc}db|dtsF})@pK7K7Zt;TKIimNk$&c-1_1UeoSfrQ*t6zR^xr|2W z&Wk8SuBQd#mb!L~j_}vOL4rb32oynXN{>yz}3+f8I%&^iWWYAxf|t zxh)li-}M+OXMokahsIMOkBBBBW&%T?stCy_8)a&EI*H2?V51upbV6kg&*l7a8!yp5 zxAF3EK5Oo-dSA`!;_kjYcl&(gbCQKhf`=;151zRJ%DG04h1P)KfU!_?r}wsR2ZL(OZaDs9v0h?qD8D@5Mhe5tZ8Gh* z?Jr8klLH?TUK=xOUNech*`=RSUUg{dW*RM!ZQRCDD@=LVY`!=|?kiO4IbF zA`L}EO4s~eoonmsCxvB#c-rvn0X(_@ejnL3`L_vIOjjxbZh$~-53?|(&?pjl6By~=e3xiQ{%WBi3{Wp6 zi3Zy#D7w+s(>^*vT6*C&#$omn-526ZFoqAi4IbjwvT#COC(qfMY8^vNn1s4bya@zY zOl1iM%B3iPp%|~|QA45xi7?zQA@wmjoMl$VWC9d?Pk@)0c9=>HT)uXE)=b0kU3h)u znCyzsp;&28I+G|E?I^ajrn?}RWwI(omhQDN^0Y(htLgI0c?N}>|5*8GtV~$=i<*fqS#O+V(lQKx+)ni$T zQylPSc7KS_KIZhOtXVqBiV7-pAf3Ifz0*Fp7D$N@n^2a4($Ycpw^yb=`9<)l$(!~& z2EgsDb_Ea*$YR11OhOB);-b{|hVb(MSqaFgz~0GEFfI5AJ08kAlmM)wwc{GydEbuP zVV$6&Ypdo`=2EDe^2-_?my4#5>W6!^7OLt z_JFWs8jh;!wbovmDJzKu3X}*QJu_`#0=viXZ-@-|3?*U`EzKp&@1bL@p#c{M{d6c5 zjSW_msdL$9SP^xW{dcytDNrc(UC+u<;Sn9&!)g|2CUgOeH^mJL%;`8PbKR^w6}PDp ziA13F(**Lpky;>*7bp#=T10-1>Yx!+EGuApEeWYPP-xU=NKk-USeKd>ET*PXG}ma5 zEV?GOeitW!Uja?kr0#tK&Zn2NI--5g`I6gcEIu!QFD&GjpZ)g6IaNTU;uxHmh>$%U zKWac2UKR=*0yY5L7g00RIk&lskuzZ5GtCER6e3%9vP6?dg6hal^>~%ufAps!Lb(u< zem2r+&i}Ddb}`vf3e}%1l8;GD2@|&ilyZ(#MJ-h_f_tP_IGkEidU&7vMa&!Tcl;%# zxP#CGRc=9cVF13YSu&D{^|#66??NccK7@4azF@!Ac9++2$FqlcA-Owl=_HP=Uml!1 ze`=2d2px%mX0I8-MCR?qBK4}&2)2GT(^DkM%Y?GQ-_fAC zp{>d?w9&zh@GbMgJSZC96Q+=sbMzm6v5d{{%2;f!49L zsp`KqfjMWatX4zChHMMd(hPcHcYPiH<|FvXWlr8LGDF8Fugn1|C|AS+WmmI)HohXb8?|vqTtj#DRo?*ln1~iTAQd*Fsdu2 zPzD-FB{D(83lo8g+(0o&GKRL;>2J++$abb#9zbr%n;>L&e=m)rNW|gt*13ERWWxjw z%7r$dBc|G?HQTr*A-aJFo`rcfJPEg{bV7OxBMI zB@ro?c_-MdAs9QRLSBHJijFV1CYZk9Hp4}`W!fJiy#}-62L@?-E`h1X)pk#?>W!K` z-E_Li-E5=#@kDMqC6%B4`~~L3b7>WBv5Y^P3U1j6tm$HQPZOd;#5LKYBBs&%)o8Ti z$qL_|X#t#zK?jm_DvZxOuKZj9A&(2qogfII**R2J#b_sY7X!(W*Ko+q-ws@E3l~~m zys!AUJWOmFwGQ2ix3ZnxB87b@zfXM)#eST^d$>bPe(sKKd_+bs!p(&sd#5G{OTHmLH) zo#>Q^y-7l?4#f|K^Mq0L5IQ;xPY}K&#um4Vp-jIe39(qFF{hX3+zQEC`i&AEP+YK2 zA6z=AOVQ_|^;kNcXW0@0l0YXmX1cZrIzAgmFXhCgBxHnYp(*fVR1P>t9Ndq;THPE! zr2FZX@JzX@v3i|4udLNhrxhnfa+Yg4$0g0j`9)Uj2Iq_x(m%_{egYdBp^ErNOl>65 zRN4+qZ)vJSwh_Z&Us9K8f4B2E?6U3iW;@3@xckPF?jT)|2zyx?572y_sY?M!L|Xkl z<8;JR0fxO-5H3*!g9=iU)#pWS6oJw7fUR#o$S0sN29gsVf&z&>aB9uq+;+3&G_+1j zO7aXo5w<7AMzQ6yOLEE)1?>h* zTeD9zhQ>zA44HNI_oof~=WdkvB$sY9`NSc!*ND0ePfRF0x@BMwSkz+mW~Si%#N!8F zq*W0rB{k$kxiaVUi`o0g0^9C8|9y7xrvyzT ztF)Cb=|`>ruxMn;F9CmIiA@WE?=Anfw=azN@)v0RUqmom$8mRg&`bsNwrKXKHD71- zN{pH8O<@6DUdJM17(yW!8Y#iLMTq@z)x2zY-Hxb44W(|ech2_`pNYk=DTUo*kGyvr z455ce%dey2e89jKlWx22&TC~pXkzs{W5T$@*Wf7)X`jm#+kVf45!xsaT>v!e_U2O7 zrgj=f*T)OKmJ%@yJg?QxI9q2ZD7&qvSt~m?2R=#3I{b0X9IH|mT?F8QDvC^jI&rC9 zSvLt>m*ZDK-{ErjnEclHHd8>YoDLIhsfwZ6h@-K`M#X`JRsG{q*jMno$l++5!$)_Y zBbnpn$g~g=+NH&!je045S!X^lji!&+=BX^8MbyBt8Y0w{JpN_=ZY{X>SQOAzLJaMy44GrNih3u(E=~FLDEV3nc*4BdtiY{AuQ;ZlJ~|40V1rwOdl&*a50p5 zBE?x-+EHWL3ky~$)VF(BaEb%viug6B{;G_RMhYGpSDn4#EC@%=$A97DIAs&Eb4$>Q zu=e}#$RSWOs&FZp1j_fq{Bz7|A0<miJb0E>PxFO3+=HjGrYK?`LfimhKxqgiW1O z15Z#SefK}V`WOn=Cre&I(2mRI_~Tj*?fnV#oGwX#@_ZSqKV}J_D;lV((`gfLgPU(J z1@BX~1(F)5?`{+Y(+*Z^pmMq=f`g~~I9a7D>i~btKOlj=lPeDu1i!O@1dl?k&YtVA zHMwMtfza1CaX9Eym{YB?eq(KtU|8PDdgysZ zZ#W61x@EPV_G+~#a{)-UV@v}yl4$`86^>(hf5Cmg6P4NkiGE!bYETNhjkFLPp*FbJ zEO{|I>ki@KHy3?yJe@%wqigj=?@Dg*qJAV>}x>yxl^pLZ#FYbU#otesGbW9CDO~0jVgg414AKG1siROsZFK zHIh{(Ey-!H=)F`EkQhxmP*8I}(=(`oGKhmKD;tVkF~$$lr7Jdsw^hD35>VzIYrddz z?B{BMY%&iWEEYSN4VK^+b$4T>5n@PXtIbBOM7l56O`p2a?yN5A2r2n(MbPpU6y}Qs?$Mt5uca_( zP>LFyo^2=csGG#QdRfRf>`u5ZIql2WW@iddjcUSQYNl@D1$q#!)|kc?RRKiAa63EG zQDZ!v>@$mw*q8~cQCqQ3>ilJkNibyI4_s4;zpjh@L!(^HYkHhfJdRwX6Qd*}bpE$1 zNT!#=ybanf4c6(tDEh*g*C^!(b9nley|=Q0_(gDH>1_cQ#Y~Z-gsI(hm>X5k)Ips( zb>&M#)!MJ~eK4FB!m+7v4f`zx?tK2x18jiWc7a8}Bg zHH>DK6hQflI>XXweoC|Lo`)RJ72-B*Cg<>-<=GrwpL!nN2&DdNVep|#ofTd?A@xMK_#KiHpLcm_4O80uhSpm1heW; zvy(~eYluz>d_RaZypzO6_0KC;OnZ6zo};Q#a+lp5H=8Z%w)9(QYF(k_m8OKWLr-=G zqJeQri@J*6Iqww)3efF4$)=oR-C;ImKETVB&m+#|kZaZ+>8qjrRt*9ELQ!QEuEsLL zqM5kv*FH&?JV*>R3lRFXp(wH@PxGx(#aN`ijGn(PLIVqbUJ9JXtOVnhlWo=+SS9vuhjAj3Q{Ue_Tygka;f6&O(kPa zZ`GlWF9mN($_Ag>E6~g#T9t8pvDarw`=D}c>A;`%nh|#viDA-~m#^sq8q?!9C{@WT z*!45Dhb7jz7aaM6s_QObyPzd>M{t^@q1qKPrBdcRkJypfUW9?_2L%7%5qr$P5J6Nu zeALGL>u@iET&C6q8mvF~1^BXYmtrw#r&w&Z=5jw%RHG-oZEfV_9WC2mMvoFv>Gp4} zbkBdx`hE>e_u72}6Oea{ST4gGM>3&DjcXaT^Y^=in+#ypMRPzBWVcMjoASE8eB-ou zNCI2yh_5Ua5cpDKcEzN<(~78JdggWQt}rrA9;ZO1H8s(%K9J$OFZU!9@_v2z-1NMU zplAp~#NqMQdGW7q9>ce7&u4=eF(jU%IBu!Iyr<+|5!GDIQ~JaIW{|d8>MrN5l{NBa z5#r5*(@Q69*N2SjPlm?#3xa?%`Yr&v_uLbsWDvG7A4*ufQAG=n&D^FIhh zsS->fp6og=($z52`=ZGMLnevy9s9$cpF!~^{aB*b6@b_qmZ$vuFr!Y z?xqh&FQuwYB%eo|-3gp}&p)A>hiQKC2>yXGK~|gsfpr5`-7u@Br)}2s3M1Lp1Sj?4P|Fjiq9yq-4MmTVk$8az*Z%0X*9# zArxMs&hcZptSdQyImJ45VR=|VGl2L^rza8kNI(Q+ELtRbXZ(Qt%~F>aGk`V#wI8#% z5dp%pfLB3EJNrheriDyJz4i_}Zj zDuqJ_puPt@KQe1sgYOEHg#n3<1D^+E{mt>sqG%GXi-a{pIL*k_EtE+bb_i;7*^1~3 zk7Vqj6Oz{ZeXLG~O9L8*Oua)Y?eh`B9}a^2g_$u^2gTUI8hDNEp8Fh7=25qens7Qe!H%Qs22-1neT)iv0iFh;dd?^SKd zvGXJ-vYloP2P|(`5Y55s0VFPS&Cw%{j8*AdW`MCrrZEC+&5k?XFxy|b-?HreSrxhy zNbYeJ_Td+!5d-@!^%es!@z;4%J3Q0-K7>KDT~TVes!xu_c3jC!2mgt%je~a#Dbvx@nx|T9#3SB94-V2rC~bBKi+wSE8GKW}!c2;2*)DU_=A{;x;{vYjBBz*`_8-t5JaAdP!Cc zS}=+Wh!;Tb>WT6S;YWzbD=Dm$_efQ9$w^=G9x-_@dIJn&zNOb9S^`yG)uI zQpn%y+auLZ)RwZXeX!TRlpq;Q0S#W?1hCXDasgV%lY$bAigai;_K*19hj8+JoO2kC zWc(Ho(FiUz9`c@=Z?orfm$gzrxuS>#&_`>gi#vFlJA1bUck*Tsjq~8MphH= z8=^EM_IJC`qMM~LZEKaFj=PxI_jqeq-_X;2fo=vG*>960bosGH(jFygkL046R{xM) z$z=x2#}pv~6~WzK$l#%TPT{qrVx^5+xQ(iIiK*u!IIm(gTIWt*r2DV){+35tmp#%o zGn`%17K1}IJ&5e5oRpJ8fL(~qCx(cZ*EO|v{4q)ZxxWytshKpX@ABIGKrx4{A2E;-z;saQVxVV;!VhTgOa?;uH z15k`PexXKBD$?ka%a4~N z>LK!8z(DnPW+tP%b%WTw=S`b0Yu*sm@ z8;m3TxZYmO^t{a8x&sCaH)?`uReFw)3l|W+{86k8r!*ZXb2I%sABk_)AU`+OgyRzQ zwusy?gP)Nu>ly;C9QVCEtn$7Kg+d8l~tJWmm{m) zkl6dU<#T3NToQ>$N(=!+K%`8vIM=jrF?9h=e-8m}Wo0eU@2m#-^4Lk(fP`Q{nq2(z zwOoJY$7c|1?=ZaVt&g8nT0Y*y*Xq3VjQ6|UQL;_x?ZVY`G+R_uN?cWURKsAN%>>iW z{(Eh|9UF*^CI)1C)$SZ= z+DSNhYqeRf+VCZu?0SSk-(`kmADETDZka5@T4VWpLU;%INcq_QVBcoB6vSLX2@ zNKU)xZ2Z_Rtf)7dYMR5QzS7DakMkjgPbuc=ohUY2z4(Z17O#qaWwmpii1216)KIW- zZjJe2(eTZ&@tjN%Vti@0fhM?zfng_XgR$g<`tocNJE;kh%$$syzvN0d((W_O($n*@-BKm=V45-6v_>tOMwo8SfXn#-iW2R}b@9;L1jr96Z?aan~6lNcQfVJIOmp67Uim~xA_Bf9}F1-S?oMX>hqNjC+_Q)_)AT@g1G#rG6bDiZjT*dGU_r+R%!gHzOKB^@waps*#Z8XGv7o`} z$Z(gM2gvngmQ^oQBk^+j{p2o^@xaOxQQQmvjZP>FBdH$$Du!&NI}~0PBs0P}q>4cW z1(R3TI|ErRZKp(n($r?bXU-csXsRD-gh*MyGS)sAnysmW6JO;XW!f7f^N{8j`;QJv zN7$lsgZXR(969i5E-sgoCT{Jl7&dOd)ALV?Vol#u`70Q2>!mc5nVQKL&H6vsKH@lt zzQIj1?D~8sX(onaB@Bb&_n`+Ii2GK?=Fs~xvf{=hi$FM~*-Ha{KONoM^a(Tdh(#oP zhAQoE^NWQ?`C56~%tFtl@BuTRLiIJZHo3c$26`y&QzHQ_5lY7zlxXdf**_(|?u89$ z_(ek(75iFPZ`YBArX7}IVDofRFs;Fz1`v{NfKxk2*Ql^M(ZhT-^pn_N)E{4EejF9# zXlylAqj)lW5Lk;!M2~Tzyn8;5`Y*F}(${~ly@+r)+`4A=TDiB(ng{0zHXiAV9;x;u zqu*zRiOGN7TIV1ifHq_iO>-CEMS>2Il=_KP}}Eu zAxmwHkAjzAaT*-rR)4y*k6uM9F6wc?Ag8`KBUn%O@vgXEnRUk?swYDIUQqF;5q=Wf zoCh{=jH@4G^!sAE8qK&VHaNU35_QT(Kgvk~92b~po zOWsJH4Q5%_h6w3rWk;f4BWk%5+wH3frSA!_1vF2(Z(RO=yE));4LiVu{PnzO=1~wBiLpx(?8+MT#Lw4e4zY%9D_5^dRT@r;r^UtVCBDr)r zIQ@2kowt)f+Sx0F92I*(m1~#MFx1Q#B6QHL?}ojOUxF~ktAAz^E>R0B!;wXqiBtH+ znJn3e*R5#+u)+ctyZfta3KkYQNXhP7qm4j+QSS+VF_SGK!|{;PxQby`YEUZ6qC2rB zCEU<SO8RqSwEvhf#h(Fja=RiX=`zEH6){zHI^)}ruz)B05q%5g1ss1^_J>F7;%cb-2xl7o2kRYS!dN1D#woJm8Zz_{5E5U86Sj3j$< zFq8p`4-RRId#K@|1!>|uJnEuSdO9s3y%c|h9uz$N&cP0Q>b--Ief(k?Otnik$}Di~ z)cqJ=P`FQe69{GAsto?*!6Dp=Q3_Kj6H2z3)^Jfh5>Fe+Rb3n_e*@D7lL`R^H=om} z7f$K@E-5-!ibWGNGriU^2(IlAUA62FJVy+Z4GO=Rn=<$cJxjBSu@pPMFiAAlB=$#x zW^*0o>@}q{wlwTm?sX`5-QR_TJ2S|RV_VbiSQ|;MLXB+8-O*+^*>4PKUm>KHw~>1c zr`I8dk@2sT6)TK4inPbo5t>Ye4fzEBiHPgR%6^|b{Cy3dbKuVef&_J_*u3b*WPW~- zFX5jVqW1;nqZ*CU*iKTN(f&cx?W7Pn3UAyo^#KWfB zt-xJq|jNTs4f*xMi>k5dRBHG`RO2O@fU$V5`>{NiFC~R*Gg{ zHGX|8AIa%(--f*w9|yr&bv^kj&OoTaT=c@JbkTPIGwvStJGu`3gKJ^%^IW)=+ffs` zb06B@A;ciduA0x-F2uTNsOL(tJA4)5EenWx|EF3&KK@Vs(+VD6RxMm)q0fzAnaL)2 z7V}_^HjeajT1QE(jFPsuieJN)(J{$_brRO>1tpF4Z7Z&XdAw@HQ22H$16aP}0UJ0S zC3vG|ny6cG+usDsX5_zXBZLOS5z)zEq$01!{B*KK0>ZP9!Hl`|Q==>qUBZnBzf%RO zue|Yk=6+I-ys+QVN;u6$7ltGeTo3M2%ZAcXx1BLjR#1@G77{|@=Q|f!JqkUtkW*R3 zGBCl(43(hXdc!DC#gY(9M(%~Us1dyXVh8(mcP=yd6mPezY_wK4gNdzo^}22BmJBF- zkzEAT^d-^RSk#VDJ{>y$k{!Z*LJGgQvn8v7#pj?DPdhj1$W*i4sYNmh^2PjM1NvJ* zJ;%^*hIPV_X(^Xs>>&**Y>^L`tCD8^Li z<`%_`iDf0Pq@s}q+6vJN0=c;_({1gsUVYah{}ygNsvu?pReQbwoMW?sL!pb-3TCjc zO=)mV9Uj%Op~n9)>)EKZs-=T#e@ehrNk$yJl<4#T(XA&>T7ZXpNY(AShD`=(h$N6x_fg_chrBm-;8@PJWl%J-b2MxM)w!Ujo5oarS||5&-~;JGaPe1?U=$Nffo`k-A&`C%f#u#~z5jO#V&~ zBznEM-0#fXo(*II6Z!sP_$c%V2Ig9R1!m=DxeRPyx}6%=e%S<`L{exB6h(A%zn3QX ztKyZ+wZxmv#!XYnL{#j?vkBUoP~O@x62s@4}1VeD(PIrs)BFZjDS zP_0 z3S1t7Tme2^*GqIl+_+?T;U{oC&?{L%s2r6hJh&5mu7r^1#C(<_()DuTtoWZ9HA2JThlw_`xYylc4~Fg zuThG6mBz2IBpyyGcKw&R7bV>1?jW@-P-u_j^@3mcU&xK`VOyMG)2kMnx^8WxdK+C`FAA}&o#KvBS zFSym#R05P}xeuT(W67zOdPg2v>oC)#={r7`4^I|vUoRqLCLB3L#b^vOTH0!3jRiVRKFIxJ0LJ!h^q0bV7+Z41*t}9y$SwPru`)UJ(yjJxXc)|eH!<;6 z%VZJVr=~{2YgP|zjhJD{EU(e{Yh0YtT#P{{l)?RBOeJItrn+5h{lN{f&SUQ#h78M; zSS8!oi@pqo-<8-o7~dFF^iq;yF`B@l6qxN*Ffq24G#rbHG-*NldhO#bz52+}gCIc0 ztZR?2Yiw`%{?do=bNE4FE0291hpaA7#zg#gJS}fHT;5a4J^#Yt)*Ow$a5LvJ?-GuR zI1ea$V~5shs>1~hm--8aGE%t$TU&|)8@82)7A6iO?TYn~8xS01?EEze zM#O~12$1A330A3z(?yDDu%H=(VVQ=9Pn->#x9rGAyR6vQRp*jy@2k2P7EMv4TDr9D zs#|w0e&CM&^69#T6=h&B&iBkBrtRvdXnD-vfH7}_G0%8>zTu_8Tw89=$2SgGp6}#q z?S+QzQC_G#w6@!N<+IjaxrVn_{f~PksWhOPomxlAboI1O!jOItrX@t6`Pby_x1M70 zJDyO?&1Dx8iy3PU8o)s(FgA6>KZ$i&?w)oh*{@7o5LHzx4e@E-gyffW4G)W4pTYG$NkBrN%VX8 zqe2+Q9rVWSR6G~;N-f?_1kX4>>9W#XD2#AstWUvWT*LrcAJOOXx)h11;U1-VU-Mq7 z>lE(UvotCEuys$#mt|!cAbq1*#iQzoAdlO=x%hE(i2uA z5jj@4Y(M#u(3o$Ow0Upy-sQWE>yS}>BKGo=LPgwa176ej%K+ zasuCldOX^|S=0!@~r78S# zutQ!0i?;ZM$E&>3?+RB0I+-mHhr5u+rrL)b->GUluARWNZ)?&_ZtWLAfMROAq{<2b z?ygoRL!!jQ$*QWVM3L2=@lJ|xp>R?ZH}%?f?lMVj{W6*E6_(LhVJ{7fs4FCTpm>Qy zxy@TD&It#0M7MY41gt7ck*Rnks7`QjxFO1(71AYl>PLPl@Q-39>J4QcQAlKcTMFL8_p5@9=0W{X57R3n8Ho{4o`=y`1X#?pSNo z83;GzLEs9UsZ~EmA`vYF;B+^-+jGGA=A3@;AVJTdXY_+Pel}cGI66`t{U4BTW~7Dg zF01|&epHUB7p*_F@5RI3#ZF14QRwru2d*pzC5G3>zat;UVPTW77y7t+eprG&c6)U&UWwzip-6i#N;@s_^k4C2;~@8I7oB)j z7l$(54&-def6q*qZ#(hdkqT*lgM7$nzAc?FRc0j9U(@?LRi+YTup^(1Nk|QU?h0nO zNR3zYx4$)$k|kL(GLj)9YMQTk2z7Qo@r2R*ukU|vaC6$U`g*`7(r=ZFg{ioqZd`9x zCW4|wu=eZ(lVrvwo;4tz2Ztw3Jike18k6SjjDvJp0_>cd!^R(Bd%%`iB&E#p_5GQp z?~>1h9QF&>3a=E@kGhZ(=FEgg_!Chxs@-%A?n4ZN@a(0;AdiA9_uX7>KM01?&s z`?4lU!J!TZh3vcU54)zu3|_H)w%ydo-8UB`OqshcXLwCJOWM8nm#L`R$6x<&I9yX8 zPwolddTSItIui{4Orfp~$9uAvzL^-+Sxux8?b!IrlxT=F^~#NLkpVAkBycz^32nA&5cD{u`WLVh%t1;J$OZ6xuj6#s6T|$=O1s-E z900r9v8BSm?gD^~?f3P%R=a{$DYtWHKXYDLT56T#K?i)or&8uQ4{m^5#X`ojK#zhJ z@*_Grna)b0B-+XJSGA#(8og$D#o)D-oHgK@vMdwG1$M_ zT-cy`#%E<6WS9mPXRV$f0$x40fR$v_QdrcBYx7Hw09G9HYSCfMuc2jH>kBy&fNA({ zSN75*!obra+)baygfe0B6f)0$6Cn{t0&X@-_k3Oxr7!HJ*{mCgAi_7h^qa^&|8aSI zvx06!H&P8K+QZFUQ?0pkYRWQX_C=b%|{H72PwmRos>?FN0}AM)Nb zzt{X8F~FX}@TWDP9BB=R!+F4T`rj@8RunEdv0L6mPa1Ow}8{r)ZHhIW`}$g-MWM{jC>c$u?BTjLCV zG4CggWoK(FOt8GMbULOg@v+n|>09@2IiIxi(hg$nWzR7Ed_^C>`f?|mc+UJ&^hvTH z)cKm0AomZxE034O{UV1qC(3*3*j}*kH;9Cjeqm=7Y8OCWBhU2YCsjh!L@0=~lkYgG zf@#l=1cGKkKIbAknt+fh;pBW_TD>+Bj|QcgNjZ^RyN=bSr|JyVQH}MEt0D>=X6x3Z z5^Q<~t2h&h`u5XU+K2v)91vyznRkQCw=Aq#ol=O$TPwW!wT#X@yhj`h=URli&ck5d zZ{>wVejs5cuG zco-4G*6>5w4c!QMy(B5G$!_dM)NVe9QW#}7C0~bV^J6GONb|?EJ^u6f>v&FBC2SY2 zhVdWWH#e0Mh`06!R75InYXP|A@7VQ=*&H3f*dR|t%dZOZ*)RWHXYIOO$lLZ_7I@)4 z0_1?yvO@diKc3q0CuD<3!JZhVA|9g7)VhQEyndi+4&_Yd>V3V0N;sn-f$g_x1kY(U6P@lTk`%gW zS3J6JX4XL{Sk+2t&1HIbk)NoJz%%zvACS~Bz1WY27&Z>C&etj#JC8OKGZ_5W`7z4Z zc{l$A%ZUJA3v%0b%g4^EmX^?$(8oPH@8Px7NcO^8wWj<+k7pMEl&ybvManK$`j%gi z^!85IHV4e4MOQ_{UAsjJ{jZDB5>1m1MdmB&MxZwM^$B##s{t!Qh zn}Q;wfu|&F$*WORfxUTeH4)&-n%8&7yMsTkgmxs0=~OV3YW~PXC8R2l*OuVM-{x~j z-^O2Ylc{1V*{sLeWA8Am=9l4N%`clKs`)b9zw~4LA@pIvf&OV;j>~tCiL^z-ySobc z{a_^!5o4H{OoHI|&zPaNGvlk@Bw&`t*PbJc&xr{g_&M~~5DQjA-$#cc$m8}NAP#!l zA68T(y?DSUa3=lT!tI(}ce#Gi+gIQael9w^uOqILNHB55(3Z*Wa46hy)!NGbly|IS z-*7a!akz4PW3st+;e;O8G$x_Tx4!r70+;xu$+D{Bzg(RdK;@Kf>Jt> zHG*beGt>Ncq$17W3zQ-DO`?rdQzQ{>eSA~%%Sh1-=5x}Y!TtY2=oETDUWHtTjN8u; z+9{4C_z8Ojw9SKmflq6K#R8{?hcY}ONthW#Y<_|wb-_V@V_Dx3Et@LQRq5MPuX&Jn zK*jHbLa+a5Kb2(lLMfWQYr6t^aBf1_@ zJ=`g4C<1A^3_SURhb&Fjq}2q7)80?+r7|XHMncxMUDikNM@p-GI~DE+JLP^Pwrhgi z1NH;cFFCT_MB$4ZJ5{J)xc{Lk<{Uo|o z1J}W|5&lmk^aS;WE$I}Gj8Rz+Opo9n7?i#1@!?@zMxxg3Xv62<4M$KCbqo(drpKJI zYAeV6F`7e93bGIcS=tc$aJ#Rdzzlz=)8O4{m?nfH(MB$R5M`3dfV$|-ZJNPv{3H_@ z^Tq;f2FB9Qx%%?B>kWth;x91rwBilMk(fVk+s+SRQ1^p$*6)HJlhdMP&d(XLA?;ev z*9T4ZLk?@k%X2U^9RrCw^ z8INVrWAQ8;%r)<;X0z4oZCU<{KO?gIjG)i~&xpE?|BT@BGrBK4t^Jfp>mlfutq2b~t2EbDNlMYg{54pw z)ibozQ&PiTE^rPo^ai1q&s|CW8em@d@ZLYvdWk}7J!N}FBZb;~$#8yQAC-uz#CtYm z(w$S&xk6Vq-8ZU&e@R$hUoQ1@3{Q3C&BO`Qfoo%ij8gM6b||Sk_ner&YLl8apYRHy}<2) z080~WY6nmWvU*Md;%jW03ngW^pulA*F@i|Q2tcFBT_H-}D9TKqk;pu>>CRfY0UwoSrF*J4IyK#L0rF8FNf?xR7v*Y|_S0hze7-GP*g-wk zb@VmB7+yo`RK55cXvJ#}4}DVa_dd70J}*VQl^k3s4Flh0n&vH5z%ERQ>ZV%J!PBS@zG+ar_yQY?Ss z6Znx&p&Psw)E*f3x;r~G?>fnn88^|u z;1!g=>u7NwAya+nFp}};Zi|TG$tu=ObKex!ZGFQAk-wQ`-3(vatmtzK*p`@vZyMEc zzF!xo`_ru&qfiE${ee&vwt)`Umc!m$382FYXQ?#G-p-`fzr(a_jJYgd57CnCiuUD* zKX16Ab>rYd_qy@b^CwA{RJf`$+Y9H;@!kxkV&c<}7cM!CF{ss+#-#RplRYrII0#8xK zMyJKWc)x6>>kC0cQX5m^K$mGHQyt0t*!lH`L@bX?vVpFE#t#)nWeRP&l60_3anjBE z45o+_GnFy^Z>Ivr%7C#y1BN{V_A!>VMC|9AJ}a$wUepps3vqM#Q2QTzY~fpLV?}$f zMIo0TF`r~xRyDRrPg<&U^q7IAMj+lu1_?GkZ`+^uz9(ua{{7fdNwuETW|NuC{f_vg ziGW{^tlL;+hAt8*Fx?>+V>yS3Pg~-JZ$tv#xR5bt;#ua|xgRU|IQSey>1B^2lOp_` z?k~|{d?#XrSm*D5vECt(FlsR7?N=XJ`hCbg1a#`*x1Gdj4?KjOFV7EfZ1T$8?b7Li^CBLt<)k&SY&d}}S6?H z^gh&|vBA7og1}Ewfe$+ZA2ZO;d4m^Jv=DRPDcGL@@TrN%ueX1XQUCAXKyH>oVBJPoH)^U=6{frQ1Y&SvIKnxT9N7XOnS#JAMJ^V~Mo8!nl^s7QX`=m$zg%=3 zs^VC`U_Wm^2d*)6<$9i*dd$T0EOYAfhG8I!yu>dXq9j~*S;x?IfJ^=Oy6Z8osRF2q z@l>ZOi!o9B8r}6*h@U(yX9PUuT9C6kSrOBVet_nr(ASXz#;OY_8#q(O6^bCCYE*$l z5!=t%&kKH*LshR&{ile|knbmgasBnMAoBS7>#!eWyly{pN}QTFLo^sK6ZX&X3H%cD z(3LP=29th=m%$KEgb3xD5V|TuHa>jx#Hp?5Nz*x+1VcHmW|HJxWY$?o=d!CrJOr?q zW9`@MKODFXDWp!KIQ0blKnI&zFy9nKne)H~>nH0~ zmtXB{$QFS)`9mN?5T*gJV2rf%mC<*x~bkg8DaB3;9(m~__cWRVN1RU(VkOAWxHm#W}L!5fw)iIvG(O>?gCWrC+)6U_MD{f={a1&QlS+#RgI zKMHW=jhdQ@1vN=kLczGqvHFdVaphK=`^=3x%gOOzNKqv%7_Kf}R%SVueTIu$<=kV= zWmcK;*YDo_#HVh9p`c#=fIoTt#dSH_Z%#Eqzxfg~z$^rt4G*PNZ@;MtrJSv9@1V47#S1Qri<$y8k^UhrTh15i3ZBp>}1pA8T0*oqT)= z>fy0&+`D{9S*%Is3~B9Z_Sohes4qO5anx)&+O-5NS)g&x=Mk@(v5L@czpzsX(mCMU z_#~TTR?xHcb0!x@K+g#EB&RvT#B-pIl;fj1$_pl2G6WiVnqw^KCW>%f)Xol4Sg4TV zf)%jVPw0mS`*HXD%TqQUh>W_YutmFjE=<4cF(XwW2e`VLsL%enOJvfoo89hKQZ8Dp5Rw?Nkr(~w^+O);;}_!F-12ZSnOUud?#*iCV91{?XiS%Tqc*z zDFb_S7SC-9&XFhCVvl$hVLje8J>#9-299suVX%bbO1e#FM|OuMbMld+{fUj|JOoRD z$fLg0+z}Q`a$Q5)CWV)7PA$zM+<%4z^urw;nX!gi^wC8qn?d-8$xclWd9lC$mc9RnZyE)kb|a zT^PK}<-LNxwXUkweXqb`{Np#qBYz!?NlSMtm=!8w@g^fG=wnUkswI0h6c04e-$&c3 zm=awh%mUE0GOBxf4zuAC_ATkTLKfcux)^7#Vr=0hvizqYu{^sXw~I93&Y+VhTPBoxS-LRjGbYx+Hq zaRtbD5@d`42A59M#C2!y4%|xKkwtUcATvPWh!eNZN5UM%9;te_%zLKLxk8i4#(oNH zj_jY=|IYh07753$y6oNd>nt7#iR{!%S6_`dR)v1|WBX@FR9W0AVf-#j!dkcluzP+q{O+e+@=eoM~h^ikSJcvX|95_z(RcdsnS>7oe^T^x%uOQE53@4e^>&-)Ely}BNmEF< z$(NSQ%W;ar<>oDUX)-5aS@TOx<6js`g>wh0#Hn|m^|1eBM6vpsc0@&(q{AXcVsuAS zpQ*8-rCl4crYc#zyQB8x+0Fr;EozyyH0Cj(7w2;!&4~_p=_qMXuPf3&t#4y`SGk=1 zt1C8}SW<(I1!AcKNy*O%3bE76qw|&U)CbSn9OxNUQAI3_cAsx45yu9y*|R5QhFLz~ z7z#}-IXinGz<14n@1BHpUN~Mw;_#}mSWGKI4mlit3Q@A76%=iCK~ISCGwCLsmpDWS zIw-Jcg+`P{$G#$C2@A%yt>Zg030+SNtcgwH9p|$MP_4dsgQ`xRW3aL!>Sq3ic_vom zdHu(H7>gRoZSK1^KB|1pzE~!B_35WLRu*(am#~h${w)k(?=zocd0eq!LD0~}Xv6OA zsKuG7;j8?dDv18ed(`j@9ZBp>hNrPqen%1K#D|21IuzVu!V}j7fr3~(t;%*dZqPt6 zr$up7IgGB!eALls>o#-sexhglxs}UtV^^d*il_nZBc-Ws_pz)X6VC5P=jlAh%VYBW z2~H;|UwLEWnl_YKh?aw5BKpeX5};XfzzMpu>-N^~YXZ+r6j0j`uXkVRlLT3^?iz{8 zYLuOSqfe1Fj*X3MtniaL46xe?z-}vNmtRlT|T`I)^3X@DB zQRvh;ad7DTXh%$utMVOX52^Y`)=df()iYq-Y7N~vvNE%92i(M5HE3?Tf;STvm-FQp zjfT>h!1A8{pbSu8d>KJ?D3J9HlLHi1Nd?{c>t~`n13$ydf$a-?^L>Mx zBf={#zCBLy?G~`nn&pj#yYK8cyzL&Sb)wN6f(?nYNxCK~v4i8?H+ct7H17!pKZni& zbbr807Cxch_W?DN*ZFLcApUu(e@T_Dm+c#=?aNok(M@2XZ$IN2VwbKTu8wco3@SXc zb!(^ov4=zsy~u?njzya`#?39agjv>y&l4=n>!OU;t{|9SxW7zqJtucze*QMUy0PB` zXuwa~!IG?v{TMud!FuU;fJjIgTz-=Gi!A^A^LXECE1mK!cGmKhr%V_#S1>j7{Aod3 zfUJWVGDfl``4(FVL$GA%xCM%O5ZMx>;mjV(gl?12Lp$OSb~+m);N;$SWq*9pzB0oo z|A$G`z9M_SuHW;Zy7&@!r|go&>Vx-8{S$cISvl%seS!#Ux9XSD2M?&a{fqouS=7}; zdhcG5TWaX66xcQ&*5ds5PL=SKMV(bv4`o}Lazm>X_TL06Ek#V$FeQOSvL#kx=qj0h zm`>uAUi_pUecS0=YIf1u)(=_a0iLQbh4*<$S;~(iy zjO;6e$>F-y>Id#~G`$plFT0dzs_Q6`kHRc2>Gl3g_JNB3ov$YwKSsU(&|z?fcW@Rf z`?t-{Uzh_OSrDCQm}_dL8tPMN!D@_$Vby2}66Km&V1{f966Hu-$`1h7#2E|bK+TN- za@beSE@O^e!D)EDX-++h>&R9jFC(mK9ARH+@DEl|faXhq`}~W0ABo(Do-0S7ZRk!q z+-}goyG2P7r*1PWJTdig^yiq!DpTKA2xE~)uQ~h8b54B%e;Y4g%9%#+HkOn9=J7>+ z&D9ADaV3GgCFIm%uw$SY_vw+V0@Gzk4O+z2y*ARGO*!QnI#H~lke9ZPuL^OTZ^78E zaHb)%@j4&*rSQ4SKR#rYFW-KU{8-Xh5epbKJu=2}Z=H}8>U!a&@m%*rcW!*7i5`|0^^k(=nnK}pdH^dyLuT3D@^W%5 z3Y5DS!swOEfLy#xehVhP(h9Pxve|5P04(fNmCCu{a41xV*s!51I2=|K%U6jN-3($> z7YdOpRm*a&TfyRhWyr;=WajiXA^hn%&2O_!I*Vj+$MZRRgEp~u9Z2(nz^4z~31jl? ztx>>;6Z`@x1!ZUqPq}~J!JlGu#>a%1GA6;8gIYWWcxcUe4##2lJ7{wZ0_% z8%}p)($dGE*n;=+uc>ALcxWDbZ7dXGEA3Q%Cfy$(BXKAyYq7PZ%W0 zh`*i5`3k&GG+6M_A|fSsMv?_rfWu@4v!A+W@6?O@f7*ZLS-kM7U|nSyxYAeq_Jp;o zuek;(S9@~7^mc*5qWuqC%-hdmr14Y#&a$}rx=>wJOqB5T`FDiX8~*{J)9m4J&Steo zHP|BKvBAzX3L13yV5b=-kGD*{{|_acFb3D*lVB5Ec2o6_K)GA-ag77VvDl(Fmsv3V84aK1ATdiPtzI+ zwH1%AL<;@ABP>*;Sk0yfn_^xd*A_16_{K#H!aM6Vz0+lN$1;89t7coQ}RQ7_vO!-it@CeG09wfKE)efJ=g zP)(ZGkLY(d=r@;e<~=@XC_?hiJE0*?(MozcfjtG2gkhS>b+nW1X%dUr;iVlVo7!E5 zq2bt$G7|5|;X9t-$XO-MPgLD;#~q;2CsdUnu5|4f!HfmKo^oYS&w?V_sj0H9WoWx$ z-21+pK5H60$}X$8i5|VFvi(C{KXN3MUj%@DUbG7!x>^y`GhY89IxJ?!p?@tIZSgp^ zC3>_?pS^i4MH>p_r)R>+&>Jg6$~TrOwR`&>$&y4JmleW0wr*AR--VXL!g#)}+wYl8 zHPkpaIYYf4Y`IXf42k7XtP@%cFlJy`Am}Gp`$w~CiPA%r-rk^tKgp~ooe201%FPzs zt#gkp9>G?MqXhskj97O!T<38;^m$#(V_Q9R=r1^CAhN%$=sb%67MoM2(2rk4Jw2D9 zna?s|6_-wggB;njk7UUVL5_4obSE1T5R|goNN$?!d8#O@9B!8lXL}my9XC`|V2uBA z=+H$q;6GMd_8)mcSIE{gy1Q)1FzpPwtf!~bIosb4&pSkQ%fMKxj1&D>CkE~f^yA%A zeL;LPO{c!^oaZBBY#57!+ zO#P}vB)VR#=PJ>Am@1|f+9RK&ZI5VPUwUBVB(R}5F^Vyb9i3jvF4ub|JMaG?ujmdL zg~gIFR4<15Rw@|T$L&XH5aT#ng5J|SRG;>TYI{_nqeejSw#8Um(N`9!>z2^M4h3N+ ztPyRR*G8@(*EaUci00`!RgYdnkI*;?lk9`>2Ad|y5YjoPa$E(b8z88k;}l&kSJBvL zMVx=)pA=cG7#lk&i7Hn?;w1p+OIQ$mYFtC^T3Ls`0obdWoH#wP>EDdP|)`U1+yal!)snV z3iBNEIAegFMJFC5*Wt#-lK^;vby$(Rkzk!+PFuE&6R{+|pO=vrYxXSuSDa*m%pztZ z^zT)ptr4w=&%HP^@329n0IIU29+)#}IvG@HT2NS;;YuuWan-LTV&QN&Srst*1fyzn*REZ<$X5<;A^CT=4p+i$;H}Xr`sP-cpSKKG z+V^6Sk1Kw)0=^o7uUfR7Z)GHW3HlvV0T@_1k*W-OJeFw-n4S;lYMvvfNVmeht4DV2 z-l2&4&Rx59>Y{wUt3m$ZIhUZH>ZyhFZ3+I}1*^lZojXCGu7|rXIqkU_(!VN=Vjp)O zOoK+IZB6J9un?OlJpE)6PgHy=+5hq4B2W9t+e2Ar~~9s<>@Dbu?6<_+m&0AW7T2$FaajGl}MfOU=T^b_unty zmzl^Rm;0E(-$DNhJ`g!SY-^0t{29TSl>cJzh2zq;6+nk3Raso&xc;JGwrC0UHwqg(2gsC7Dg#UmbhY0Ml|R%kNPJ~Kq< zgUBe{8i8p**2*s%?BnP;5o@mMUR{nGB@LIq$X4n)mRrBsEU{RV{H*Wj(HE*&Md1SN z)vxXz(OEZ7&TptZEg+A-Bo31jKYEd~oeATol=0-81f<*x0xb>nI z;f<9KyaNR)bFI;PP5u2J_91ck9zY7pSRt7RW^Q=DZr=S~@w~eOJl<;Bqk(+Kobn3s z{`Z^a{SSy;7OJTdAGqKA^JVYTNOl~Vgv_Df?qyOuCJk&UHv#C=utB7}b3 z7FCB>1Y=CbMi1w!ZjtCV48?Fi#3w-C2C8pghgsZ!3p?%g{Kf7xM!Pm-`%d(RaJ#i1!HBjkS?cs>$hh{BhiL*cOe&8Y?}tv z7uQmKu|!llvLU)4vf-Enn$r=AB%^$5zvT~D{jTarz6CysWfwIq&;_!iYV=4t(b$cn z{0%-AuY&nwgq%y(M##Bjm_Yjuhj!#fn|k5x?YM&;u%(>hSoF%`MQ{oEo#quXPy(%q ziHJjTW%lxg6IUnW9Bm$~R95cnJ~EOL&~5NJuMXBV&lj*rUPmvC@+f3HQ`vH@fl)3~ z+uGY!QzLxyYofhYjOnH`c2S4Ql<3A1l=< z&kWOZXWik>fO8h2!5P!RC{8$Vs1kXhDt)LkRTALuejcPbtNKwN!b`!HM5XG(3&yWa z#Yopu;4N(Y!z5Knyay~S4zC{;u@g(|=!939MWyOm`dYJ%;y1pg>(6{knYYBz$TS~* zSgProQzJg|ux^$pMDh_3eV%9fV1Dp9^FywKrt)zPLR=|f9Cf2`n^#E9Z3+@>MjaM%iC#0$tj&C2BrLdpdv zZxL=tMrvd}63C=Orif?AL^%4ngj&Q5)1=#J&TXK*vn1G^iZ%fv;32-qrR9)DxwL=a zxfQ91BuDge6R=igSZ&6#U`%smUGWZyoc(&NPR62|P{Y;!2p=K%vg_32+!XGj{F`Nf zFBf#xB`o60an5{S?`-)p1JJ@$7C;$q?<0IflXzLSe{0*AWm%jdHH-~`ojQeK`WSw@ zALcEUcj3m;_@3w!pofS~0BJ&DDQ53@*$4-4&@`Jk<_^|!LN-WG%Edil; z?}c4;77`?bzvFJi`+0oNZFswnMK|0dN?}QS-!*{3$aNF9b`U72@weT{@ft7K&jw|H ze`V*~R*!i%_Q1XpKgjNge3fju*;7Vi#qYHs+2+(nx@v(gDtj8Dmdz|I1*}L z&00*uw z^nfN2CEK>vVczhA@f1}+J9e@TE?xouoW#$8-$?dyYr>Z7;)xQAW-~=|1)h`WpIztUBZ@HaO5RzCqhr)70;fo_QimoRXcY6rA)6FSn%x1{6%NYQ^Q{i#TRw%gk>wBr4RLQ zIva+X%ex@llns=dvSs5!#feRBYb|n7NS&xww^@qCqk@q$xJ9(Q<1D-smxbXR%vZM# zATb!8&=WUZUAb%pS(CWow%Eo}hJF0z8Oq8^2%QcoqJ2K9VjLSGw@0*yxO(B$w ziHUrtxp7VcHN%{n3ZUhN9uvR(WsdNcPc%(7M}*ED4jXA-w`y4e)}jlK5k8U-*fB@1 zYTlcFawa#$lB};jLCR|*Qoc{7Ly&NmT>kYrfHfwXk;_E~7v%Jo96-}-q_CSLvEW7) zfOi=twTsD?amsW8sLwFh3hnT+Kz#`7wY3gCNfR;l9h*B|rW((8STJ?Stg-Q&x>j-J z3K`5d8K@2UgG(0@lGE1h{`E`0`)y5|wvl!PZ+@v^XDiQ1f$l5)qM&mAtA^8-$l<0t zYRX032###5FeLVy-vA33Pd9IGLs-@g-M~M844gAXD&g(8`-k@3_!;~on2$C?pIKTT zn8q)mGXs>^l$)C+Qh`fj`|0kv>+5>iTAaZ0U@>oFyB9Go3admsz>^(W`&Ijo2W|z> z!#kiy;{funADX+Ecy5Sq?c`WaGLr3KAvjcMuc?+;4Sdaxik#m!xH#OE4MXSZD%9)w zn*2PH10Fp^LYG8|bx{&4(by$rYGb9~U$$*X5LnD_+KQ1X;h`;A-D z#1HxK)&(iu*nU1v$xeLyrkYZNv0+drv-us3 zFo8AS-VlW;fh{98)TdUxZ5y&KC-o`t$lRQRbL#720$?mYRqY~?c7KOQ)|_4&3Gvpc z)+Xf07OKGk2xHq*Tqqpr#1F{!Q{~zAGR5L<$bUlRIOUN?=XA-urZu%>>sJAu=J?9d zt=(cs(@5F&@?UZGA3mV2t+{J>a(^S><1Xx5A(1EgVv@qo-K%r8CEc2^1FLCc;!p*08X&u(+s~AT48`QjqJu-wReL7;JJf{E zzW!y-{(dqa8IzI?SI8>9>rPG?YLx(?3+va!m3ORHz%@{}U4W97587B8@>f|1+rQ=< zl+sgXNkhXJ^ZbkGx!T0dl}pnIUxE(dn~@b%vaEGQ(Jo15m{|#UMR{!Ps?kLas>?N? zdiWjh-JMju5HTEj17px!E|>-n<^tI!N}h0%dbdZiX))Y6VQBAaILIY}8wF1CVcgx@ z)UiS1I5$*m`wJNM|a@WY$+AVz!kv0OI)#I52G{vqCN%nNs8y%#YOXYwC- zFc_}~sKe1%F=7mSx-}#)<momW-p%xRRU~J+x0gPh>!TmHg^MSxPJ(4!R^@nV>ow=C7|8LQ zCi#uJYnN1{GZhoJW;nE6R*}CUwY8^VNRhx56QT^auFlRf+X*OyC4>k^4!ci z1-vx>C?g2mI)>vcQg>cl$B1G;^s0onpZ0C?4a_n4T<+nccf~oVRAxqLKM?3vKnasY=UW;yA97y4TakgC+KKtE;pV$3#dwyYSB0b#*&s zWqK7(S|cICqV6bi1uLe{7&+gr5mzOJ(J zwZoIml0QH`fp#-=Vf9F^Js#G33Q~O^ema=EZQJmoRZAz|nX0Hry>oKus^_k$iw5nH zi#~TgQosK0a`U4v96!>0fA9432eF2{YOfMWar|TQi{2bo)V!DHX*a-$I!G4W9DP`oKlBjc4IF<|B2|oe z0kxWFiBpUS^R@P`YI(suTSQ+#dzg@SzW||sIg+|b)QFH{n)soIh?I{WXF1ln;U3dI z?&eX(j)ZP4U+$H_`hsr~26S zptH}*@#vgeIR}qH0WqQw;0-_i$%xJi#(DPl?A^NWiv};%>=}Rovlo0@T|d0z816>)tzSuyw2H=+vgAa@jvp0)nXsBzrNFeRz~CK!z2D; z4oZjfC>$5uGyf8<<4k(vX_Q8fzu<8ur4xiNiD%O5k|_n=Fy=+fa4-Mc9j{FRUVbya3dfl`vv5V>aIg3UsVI-UCE#`GP+=i+ZL z6-=I-B_#dy%-c;X7jd(klBfW;>~;*b<1~PeN|-D9MNyKjOw3Oqo)?ZDVqw*14;>Xa zPJi_;FQ6CRu^-{5Md2&;7q(-W<7M$1UnIl%i{B7Ml9m}Awl@Kkus<5%KYfw`Cmh)0 z>eX`U-RuzQNqIbZCIY`0$3@HXNn`>RQ&#vl7w zA-a6*;cl$zwWh|iBMVqQTwX31sX9bXf8T+8l@SR)rE-EA>|67%_G>=P2ukdsgA&VW zW-#16#)4T<_p>qH%~#ue>Nl((+LF|dZ@{RSx5;3gN|Qv6O5_uAo>NXwU;n`dWU=HIx) z5YQ*JpmR~?rj_I(w?>%PkA>rYZ(VqUKJ0(9p8Muq);-U8KdxgND8ITHFngkym$b+W z3l(3{eSg1`LNH9L*c0309PK8h46)*?pkVxxki!)4CGju8QxRPz8yk0dVkbSm*n}b| z=-&led`A)NYWP(|gAS$5;{rIG#yHbL@_8lxb`A!Bz8Z>DaMSO2$TEUc@z-I%2<4d>3riPPk5;xd++HSZjtc$ zvnF}6$NZY}jwWEFa87%JLf^rEX3CfzW*xNmlKzIgIUUzRPi!JHGYAAchKsZ1G9B^i zz}iB4tFQD5ns9RF=lEXC>4K!QQ!gPb@v5&R&%nT@1@&!xb9>KU$ss|N@YV&jZTN6c zd+kC?M&;8VV$GQO5&jcWO__ZT{W}(PKRS32!4r7&`>FjS8=_T>nckLws01W^czqNt z$ zwk`7mQ4UOJZb1HG=7y>Fymi|+@sK12G!C|rPP8WdEamOu*?9wnPS(kbMY5T>3W8L?y?CE6Mk@I+ap_{7Rrblv_{d!wJ69REQ_FIO%~ z8JfTyIXY+L2=6ir$dRg@ko1;j4!*AXrKE1?EiEJshgg}>OLZutHRqZuwNjoz=nSHP z?{BC;5*E=6UPNkuzAVxy>)=(;AE5 z{4M+^@RL3W^54JSJ^RSaa`r)Z5*{PSJ*#v!T6w@9rTL1dnH_C3hd~8yD`DEfIurDE zV%_|^)E5h-OcV^y{KUJPLuGUcmTsCip0)pIzkc8rq>z&nVlVA=Yao=&4A7*(e3Nf( zvY{1=oB$JCAz80A=ILh|bcQCaBHzIK46bHK2B_)xXE8}vmX?At3O1%P$v%mVqV*#U zt*VL26AMEvnW}2~UPq$EQj_82Sl;r<0Tsd549p0xk^>iU@7}iFeLOjEc~yXgM+^Al zgB5}h8EgubmmwA=bBwNGQ8*?t(I#k?v?tNcx2#LEF+ ze2}L3ox7zB{OGy!xJD)Hiw{*s;JrmnaUF|NQ#@ZEY$$`TNn&YxmN6fK_IzN2>YdX# z6AjPJJg52pqCwZl;BC$mc%FxK@h1v7=24Jz;1>IjEdTQVqb7Ytd{tmAR=E5iJssKy zExT9b%)hSvzuu@Ev%+q{C)wY^JV`Q+E+nzcT@AI_RE3Y^&O}B2s>6u@>u0@uLyVi` zQE-2X(|iz~^Ad9xT)G8*P*zp6@aeyZNc;g$?3N7}))y6hm!KM+eRk@ym?*}?&(nYJ!{|FO zsmTJ`y%UfGPriZ9g>NVtQ=&78w`^h-6P^2-8>*{fI?WgA5=Ao8G?7p#Ph@7MP=1;o zLjZ{D1-25($oY~kb6A}E6IKafWPlYFVd~3KqNV{z=sC;6^PL2upEvNhq{$pyDq_{o z+ds8`f(UuUk17m|6QnQ$_ryPgs+2k+$S`?-=aE_Rias!Xr62Fyjd(@lx9{Z9Ol;?) z`HHLj(li#G262VX2tjqTgHwt`Js2n87A%0nBig_G>#WceA5w{n4`|M(6DlLZPeEhM z4oOSpvzP`dpE?73dZI)efEn$lSekYU5i=&3UG+l7@TMN>5sy+TKprBGY|G zJB6KY5edQoY74)8Tb9D(}*#-uu?G zw|+wapNJR)05-X|IXSPhD$L^W@JCETSHdgWCuH4T@|N?Mvar7X2!9jS*9K+{a~0tE zi`Oma%NT44*Gp)NIQgx-Gk&k1IeFu==(L3T&f-clmKE!0IGGg^GcNT)xK6*;InbWa z$9}W(vJi9w3?j3JC}*t3p2;%RSX-#~XJk<~un@ZJg5Qqm_=*h+GK>3{CH%>hxx!gJ z=XM(DtezVk$@@}CE7!=eioSlhdbEEuMXt&>vUC9^m*v&u^1&u@*>VZ4LVpl-p|<5> ztZ?ApgTtZEZHT7weo|vHUs2vLSBDu8hc9la6;=E2{7scLEh@*AFNTFO*tOc^Sk7!} zGNIW!(}~a@=WVX6Y0`OK@5sO!8=SMs3*#`aZ?_M2M^_6{%R<#(^krcRm z*9)UY^ncd)FxS_%?u#H5%-r8nUXk~U9QM_uqAmS#9!2)G)(VEb=kGN;!Ih6tT-iYV zg#Eo41HXkn&w37O$w@tc!=j-**ho;L6UB4}p3LS_)A3#Hv$mWYcvbQdjEZ0HK7CXa z*3wbY;G?60<(*MccFw|dq^`f3$H{8Ma-vz8EH+0JZCJ2L)=hsh*x%wBKZ@23&)u5G zY%=7RWHnWpcUzP+)%;E?*;o^{;0r^IB`r+{OI`D6gC!fJgQYUoFb}3dnGIju41;Cr z&+|43R&AIcnvaksvh#;H%WW@MBuH|K4c8{vlP;{ZW==+)(; z70}*uR)ez?mN2=x(c*d93rgBF$Gjif^rFs$$Fn(`F@*jfHK{Yo4g^I^N13mIjbL)A8okYqYy-AV^AFH7XBDJnFDP*cynOqP9t}(f(+7I= zcC|N~n0>3US^m@XINLxhbebagCubXcHC1_~r>F%=y)ozsY_;G~E%E}Lb=2+e|4YL{x73wuGmg*}e;-^_!?zCE*?O>VTeViNqC zn-4B`Ax#HIOhQtnHIrm;D*o$BZ_y^Ce%%YqOXw3!B_kZSiup!7iaJTYL5LePT+QJ= zl6rpm3YY@*jxLfQqc#C=RBK{^RQS6jU#052++DDB{k!!Q8n{R~UFxRK`A>8gdW7kM z=j2Oj{&f~Q-00It2}jk5tL~u5KhjOOL!2(H+@(q2Fzz@9ONzvcI8p|F9xEj>l*u&o zPOM1=hs$E3pkXeRK@S+bxPALzTSL9ZE9FVkfMEj`4BAiW>TP#q$Jea|8OO&h!xA`- z3kMw@!^iM5cmq>Q>ht=@c~v(Gw}zc!Z?uLz-TRIaq}Gl4QEQtMT9$@&2yKccV}N-z zENd6;i*?F!dFRSW%qpn7p=(k4_(0*Vr>gVFfVBbs=XU=Hq(Nu`jT5#8_!{8uzVBZ5 z%&_{@pYe0(QF>-r>zrYFVFM(VfTn_>oKi0r7qO2p9S}|kd;KWa?$tqZA`hn1`;ZVG zeB2i^xshQx;u91e#pn6BU_$n@N zC0XS6b*j8!ram!Rf3?5vZ`I;BTZP`F^v2m}^v2aT{(9+~s6_NxhflJ1F_$sNK%Zk* ztVm*y3)qi4yqXvUtC2!&nC93e)2G3IFP^FMUO!gg7}}4zC}R zK8+|q3&DN12r?(V?@qP{uiSQ0Awd@PJL+0iwW7{$l8{u4wpQWlrg53)<#%2hj5U4i zBQWYe`6&?x`5?MOSHJyTtc2upQx%MPVn3l(jts|RTQh}J~V10NQlLxmUIxh)vX%DljdVs8QWj$MPn-G})* z!p||g=u{5JWxyTga78&d$7&q#a5~o zr;Lv0rJ(#a3mSY5C(mhyA&1V}cRv)ZeDu^nyR%r%`&@eAX|t0h#Y zKKdwz`4P(xe~d$w>A5`E?AndnI33M%%3plAz8-Oxopt?-p?O>5DFCIRv)3bl;i?&9~qTs&=^6*83 z1Rf!iK|h`#V@nRJw;qka();YUQB5_W=vyhll6TTcdSti|FUN)9%fW7=g)rR zqW5z4$Nw8?Wr|v+rO2o%AE?5Mx=l_KxE`(*lmIT2 zl=y6SFevoU)HGm+MZl>q5F!4qL)A>vLomScY&!`XOqXP>?!=$g>~AJB=m1Ri`}5^5 z{94mqc`5AIB_HSGWgaCeb$wZ7CBJB~u0NE_u+fn{1iS-GJ+PM~=$3U}QzKyjdPBS8 zbIQ?8@76Bg9xJ5rLIUX{7Y)n1_x=-aE*sND&e}Z332|%5h5SNR4(kXLaJXm@Od5v1 zYzZrpB*uHP0OWCH28*nT<8cCG^gs3-8A60hTqF_Ert9S(l2MA~_We*8v#z4f^iAPlSfKOgif#FzCUH$!0`3Rb zx*(n!x2+evc#LXl5&0~3e$317?Dn_wm`k9)?c6cP@cfzx-OBK~jeBD11}Y#g?e|&t zM=-tfj=w-0$vVVmQ#e%gl$>>=r=jhv`s0|z zODaaScT{PxpqTc0jMZJse5th6Mf=@xiq$THes^v!D(0B?rm~Wk1IP>Jr7@|eXV32N z8o>=#u0!5{Eit>7Jlr$-3T;fSQAUOVN!+LA)xEo6Qro{j=+h*D6p!Z-o35IFet6o2 z1gq~GYY!7MZ}?yFgy@sdlTU%6cLi&I_X0SR6~Qt?geea2eIlWKl{1~L1AQ^JBSt1N zRmLs(pf1Q6B}&R{7?XX~PWEkTHEb;Ho}lL4JZjbkq4!CG=UKK4Xht>p7B*boB?8+W zWLA*;l_KH4x)qHtR9oUCD-O47jE$3m0g ze0}oFEeL14F6(Jo)l~0(hfO9YSAw^_rVhOAgMw9P7}Hj#XNV0psJK_ZrZ9-b}r7?irNhqPfMKoq^>nu`TY5ep=@_ zb7R6${sG<2rmJ}tlQLrQL?i%!cci6lo9kLS+CpvccboIy*3A+ND%oPTN2b z9tQ}*DiI*HQY%&6@=}nD69X>=Mxvqd*2_zb*Qxu|X5`L*pEc8;>;}p_c~Nc$B7% zPa2QW3*)=Sd793>)_BseMn7v@plA6<8c)$gepTaX8qdE2voSh>w+|{yiVd2fZyM*Q zV2o)zLT`-c8jsSf@m}LGS~tFEoTu5`Q;jEcN4Z^%3$#4;RpTj|$-mNgnhN>1v_T>D z=z=2hsZAb9Vl+oC&0}7q62=NGDCFSJXp;oR$~VAU1D-xC0cJrKEH#B~GVf$|Xc?%E z6|T4{SmV?LPZv?N5%w-3zwJpj=gzamQfXyjvE-E4rilG^z#6VE0#{h97Pz)~)7e>O zb&m(E;_{~Gf~^kf15h8)F%oSP<**rHuxWpK$kt` zSM|{EwM`F<30t~b@laF)s0Ea$ny1m3M+dX3Di!NYec-0b&6FCUqHDO~8114WLVfKO z^VSeUTI<_;${tcSoR>k>0DoWg#0j3M?W!JJWvtMi!V;&(R68P}r%XkR7;NcI^{Uu%S?Rfv3(JX zXds#_JK)Bf((k_^t?I1oeZah?w*QYt**bZchZ6^H%0y zv1`ZC&d78u;{)z@_(?}FrGv9-Wsh-LHa#hO(r z`|~H>^lqtm+HI88gBw*8#_zAT-BR4$>N<0i$xJH1SSVJcxM#cB-9UD;q$zE2C|cZ# zyA*dT?(W*+yz;`I0NKo!H|8O~nVWOIbI#oFju~az*T1WcHUD$bHS%LdnbBsFnQW$* zsb-p)Zf2O7W|o<4=9sz0F>Wh2XY$4~1>>8*6wN#{-z+c-&0PSnZMP_gR8su$-)>BQ2BHC$X2r5j5(R)4Yji&ZC9oka18;uFQC>Oal;u#PL{ z$5#f2o2!;pnp(&bTCZ0uOdM|1hwF`IwLVm?jV%xL*DBdxRvK2CHYY08dSaowIZ$a- z`sxj3wzhm(b+B5?OwxK*(YzG%Qp^{`P)x;aTI(s^Q@p1RJmq=5n7uVy(0W1Zg+MHd zojBDgsE+T5s^_bouX?_8ed+qr@imt(Jzsi(^aAMx>LXAef#wY&QF%q>$=z1&wnf#E z%WYBda=Q&xCsdtKbwcUL^;WL8a=i_u6KUQ^^G4d?NIM)!SEs=06xb;4>a8~i%gur8 zSuVG7x0SoC+->DvtF2pb1bn}JJ4B62%GQTczD?En8iF{zB9O_a0+5Y=td{|AXm z=)#bts<-H%6gUXFV91(n4#R4M$mBa5sA?_F4i~)Qgn%%&e1FE36~@=5lYI=!V@~Qe z9Jiodmh6_rx?gliIlp0`$PUleX2lz|JTdr7#okt#e&9l9ZsOuoi*nf$WH%LabSDi& zrfoP-{2DqBRLVM2YF+=O{q5|}#Qs&#_ON|+6MB)c;912>YSTnMR8k?QCNCPD@ce&W zdEfu-VP&KmD>V~nCG^BT`z%Q<%}xd6@T8l6?~>eI<{+$0#ts>bm24mcNJzqx83;o_ zhKeXdS>hU~I6*h=(P~{ql&Y<^Ra$Lpr{69+?6(#AM^%;VVRSl|hx|+u!7ZI>P)oYq zfmFb4m_5wgrUTOl<{4^!9l^sq4~@B>Cx&>+lr$@uP#%@lJ5;(SN}V>qf4e}F)-t>Q z3b+K@=BAVw)0^9B(hp=yPF7f8C)(EAeB3R{`JYuy(=)Op!vbO$tR>RdCr2;9-sM}6 zZm0b3H|?EyP70Ep6b2Sr4m=?I#<3?*V31D#W_~4IL*gu$C_oN)HxH96M^FI#s(|Gij~*yo_F8= zwMD_@G`%@y6{lJ7l$(t8gO4SZ|@-l|x-!ePws$8Fi`d?E@X+EB;>E zrj_vkmTHwk8h?s)3wb~&1krL@%1!#K1Qnsw1N(~7E~Rvf*XbS?qXM7vhkbSXlEGbK z+NmPA`6Y9`Z)3S;sgc2m5o5?LOA*oY_d1L%|L09FmbXd^6cCjPJ?Hz8Kf`Ii?nv8- zXbch}N(6hz^~*j61mIl#)fWLy{48q|;PQdZMyW3{lM~eB9R*YM)yo4)1!nS|BjJ5G zFW<6P+78T1X@vRye?tG`Q>0(ZMH6U7PYs~90FzVDicb^}*8S;dS`xwQrr-i2anTx+ zB8IV&b!_K@WUHI%uGU}9w*FvN0*II%m*QA)yja)jgv^}0!kYTl&K`Ze@Wp?=`zbNG zPLu>nI1--3UlJryOHw3yX6Z8J$dhk|It|*iTZF_h`3kMs=IWJ3u!V}ry(qZEmIjfrN?I+sTX>y{>qk(Zm8{ANY@80 zfBr9$C-&ey`ulo+>0Esp`?jFAV*lA{=Mb5{TjG}a%@01X+BY;+VHpBLAn>__%P`+0CvP9|@x}-hisez?$iILvo{7@zz_5U2-0>H;p z1}*Wmvd7jZ694PbG=5be0kgPD(z|~kNAHNc&yg1l&&-z^W)VU8pVAMa#hINp&H*b> zwdDu|%)x^k%XR4?T<7Bd-D7t0d3+=_xH?{IYoZ35e@(4MGK%E17xQjY_EWT!qTqvg zN16h0tef-j90BJe5Y>YDn^VzX0_t1xpFeJmoccwQVJA2I`~7_wHw{r5>gwIqSQCKc|n9Qt~lP*_=Jzdn*SL+cK37lwr7D_lt3B-rP+diV8~e zsHjMTCIK}$(2xr)dC-v$Jq0jO2qQ&zyr=_>JiZ>DGC!V6ZDR6uo4jBSreG1-3c)rA zwnMN3f}IfTf?ziUdmuCdw0crCLy&LDY%eXy(}gGuPI*GtzR`prI0%L(jI@yy3@eY! zh4sA_sL@hSL^Mv^ARLt!)>qL5!NCoRa;2B5a17n=>vf1T`H~5oHZ;Pp%mDfij^B8y z=k}<^()!GkK)p77{iXz}<&h^zceD4Tz;wtn&^&1>AsbMq4X|r<`SJV@b+R7+!I^N4;yxUjo=w| zaGY5wZ=O!!GQa5XP#)3(0BmqH6cm6be%He#bz>w?cKr28&G1f=IO`vIaz#2q4dwM~ zAR#Cznr9cJp5vw+)7Ysu*W`Q$fGCOGV&Kc5H<6bWQm@*}Nd@$;*;DAefnp&!G^ZV& zPmIwbrjBDW-`4w4ed=l`t<629qTKEU40*c#dbuSt5YALum@yEQq7*$nv3UcR9iic= zYFCZ3Qmj=|ug)H!DtE1|!a9N){>4V~M7w;;pf~riFYAd*{cF}4Q5!oO6K7d<4E5oL zW?N;L!x1)klbw!4cv{kJyY03DqIO8e(@slz1$GzcZ0fWg1XTOz7U$xC>1n3djsVp< z^ocNNp@fG>z$gM_k3ob<3&B$)U={%`JqHmMEd(!-fK>#b*C4{Ch2Sj`u!{g!-h&87 zS_nRh1RRS1rH_LMCt3(T34bEO@>4C@Dki5lM2b=A8Bd9xZA*YWm^tUqIg;~0pcf(t zdJ%BMT$+<7m&XY7ih`h50l{3GQy|yJ2=s=6pf>^09A(CF+!HFm{0#(?R7flfZ5|xDCt%7Q}q)0jQ z1WwmioKx&n$gc^=>swM+RnQhYYHglTIdlfnF=GL_jcWlT{iI!%412uiN=>2_FwJsLpjWEGj(L_h^0`dASF z@Q%h8--Q5vAAC$e2X^MHTF5*{P) zg>J|{xwC@*Yow)i5jW18KIclpSe#De~z*q020Jvg@K z)n;qeLp!|v{!H;UZmKddi~!nF)_;m(sH+KBjHq1mlBljk8|a{qcn==d!V7P34@F(c zdeEl@#Lx`|5NKpaHmeO^He1l$4oROjVI4enpo2W&Ks^e;aez;1)PB9*IIp^|RoY3pthd3~II?8eSh-BW`g z1h%Aj&@+PW;+DQ`E8edExB7Pwgnp#*P#mID`>|Vj_q@_tT8dYdqv-da<@0dwy?!x(i0AjOhk&3Kp8l4zz+v`;g?Y{kP2v) zKBBo_L&wDRzs| zs1_YZ0Th>8!|uxOV_oxRNMpGUw7ecOp^8u7U(5EfIm8Os)U~!56D%LqS|5ecy6pi{ zVK*4n{G$T;yVC4jtmG!H%)2FLTWGNbtNUzRAMjmrOX1Zn~r> z@{|{ClX4ZFc+NpZnIX!PaoVT_s4}fp+K7<8I#e)wcez;V5sJ!1g$yidC5d2jiBVG5 zv_bKRGr~bX_DOwra@-%asilB$SaEhE)xW+N5!NfL=4*ET-#=p&L1@O0s^Qi+wi%d5stiAO+@d6aK=YT2)0%~?c zLx9j+|IC8ZBuoH7l&`<#Hsv!%1xCPbCDnXphq7r!BnC2q9Y!_Yq8?$`+$hNYj zW@~hCCB+|O{xFjUYNeQRgN+buWxnt^1SR53k;21L7)E2!1HRVl+WJRCKJf@MnAkKE zKtQfA$e}ZXC~uoC#P0eqD2j=8q!OIEYlFvq;NOTqHxiuiHP0Zg#$ZC9HBu22?}hD> zKQC?TET4n2E5masY3Pw#Noa03xzE|9HB`+1miiQ)U&ofiu+Qg9neA;a^G7EYEDEmay+w1F-D}CSQDbO1Fy#KqpvEaQi|UgyT=7lXxuc%ItDm&%{o-bB$Z0XwZz_hWvP z*&Zw2DJ7+p=uTWYXkhPD>}m(ix+dQr#Hp-#Y+l95#7H}Y97qovC6=@PV$YWe#DvgI zw?28fk)0)3x8Tma&_}?BZ3$HLvv8l7Z?_RG({J+{OI`L8AtUO1nHh0L6-z`ylg==voeds#*0UKZYyoXk}!p=Uu}FJKv`JEG=mE2auMGGbP1N zZF)R=#ySW`cMM)2yKP`mm^(yc6@XnjsP5`6N3?D6quzGs&$WDxgM*U=?jz%eU85$k zL@AQ}Q}ay-0;Gdpo%|$!DDNPX$z~%AkkjxSD%gV>K2>T@IM$2I9qPs#4QglLP}-*B z4`Ahmoyk#-3{YvVZ5l#&qvq#1iYmWVy6N$g@NrV;F7^f!15M9vj0Ev5fpm{kg_qo2 zmm^T%aYW465G@Z>zq);$0pfwnAE;oyK&+LNf^q=qOq>td=qgaIp3YO-(Xk2TIQ!V% zv-vvbBg(xyekT{TGuLB1z&a#Yrgl*T)`B~nB-PlgW1wuU6I^C_XY6bUvmgkexrvw* za>?@f@MijmjVKwn2qSIHIcl>%U{}*jX``W1BMkQ zCbGby4D9a%!B3y+S|-X|@2ct?2p)A11VMaba)OOxi6g^0%x-XB5JiT=zDS1Dxw8ri zh>zhkIR>^fV!oOWkJBff!OFOZ1F0ImKg}XSixEh3JJ~B`mY)9_ ziwrbiAqKw|3&iFQ$e!$7cH{k=UaVe_>>nvgh*UqQDMG~;!j>&;znpVAd8tN>I3(&j zNdo3-p=3=bm)A@jEdEw1bU8j*g(q#Z>tI4Pk%}_4USX+jV?T&5w9HZm%{e-`4fol4 zO1rHeb5I6b_XIMHc6X3qy#;_@#`Z&tB6^@aTG@=B#87}vhN-us!nNmwLL^FOBTQty zUc$%#q>Om2=uyY;I8;k^+5M72!lZW?&C>p$4LzJDVvdd26PWf@=0!Qe$cP(LN4 zu_S&gRuCy2I=)NND(J!%)@LDL{fyI=s`^7a+7F%Yxpu~8ziFE`C4}h*dpaRKf6m$b z=7}37o?ip53M2xuH;%F>5ckl$mN5Y)rvf`Zbsr*0N9U;tDDH_7aReO7F(*txoeAcl zASKvnaeQYtZOW;eR>_wv#qJQcfuYvt_+-l^xk>i{ujm+A;DAU4=6*HQM>wG7)`t;J z+ky~JKnAM_h2^i^rY<(=YB_J0!1@RRyql^^82BV3nq^vEvnhzgsGBAA^+fKrW#?^t zU&ak4R5Ki;L;=Kv-V5=P#zPtdq?`gn>!pvtotTC+v_5VmxWXB5gpL{Az z(z;(vEVOZ=!*j_%o9aUs-3nV~V6NUA(#4A{0))gE^yq3-3Zl=8X7l zYzrMFDPy=tY#;E%iaVCRxomtZZf})Ji!Il0wtvkl(c7)paN( zi-gr;qw9f2Q_(}<(xO$IFeqDE%%{&};DG)ase9>=i_M;DPdxS9&7|-zAw=jgEpjV}fQl9Rl^6QVPWVG|h%YYs=pSq`9 z<;>ubtj6^8>PiLdP?C|2xvdgMJ`D(D%^mK;pb9zbcDjn4RPti=dEZ8MjS092v;%~= z;0eZoH(TJ$&poX~{!Ti0BBZuoB&H=nKB5mptuPU^RKTO z5$sgSWMtx$Eb`1buqzxk!2<`+`|y37?lign5XYHEgBoc~a>kfN92#4w^#vr+v^ij| zLc*VQ76;1*27C=W$$@bVdJVfeTH$;BYyuzja?;Y9=7ZTDPnWj)SO_`D_R<+eE zZU<93+wbwgigj#|Qsad>2Tk~S5kZVRV#?OBXYS8(NwzFts~}}l&ICGrZ!4URO>^Qu z7(KFm@=g=V%-R~L@TIJMk?-Sd)7>7P`C$fO@stve zQ~uV*G;x^OHE}&~v{*^kvGA_$5x!iR?C4#VJuT0v>vFT8&jq#vF7yrjXa#T|lKbo2 zL>6$%iGvlwH9(}3nNXmrqcxU#lE*&lGew8o2-G5QfKr$p54D%#q%rH5uEqXi-(#~h z$~r;w_alSYE9^mvQK%7fU=sq3OoX^xSqt}566vjVqJRuc19AJ+Ajkl7io$T(9TY{M z7~^!a$xW$m2Urc=Dma*w6wkS!^})$C)GxrG3K;DPpdg$8)$?&|8HV_v09Wviqvu?mDOa&D;q6n*dPa0PaT7IGP6qS|$v%P6~K2ogn zD&-byB`4xpMXakDh4gb6PQxa$=I9)ouqimu!zqegUUFzf@U50f!TLXBWQ1~?wyPJp z7uA{voINHpU)QQ)M=PleiMf|&jMW?X}+u;3lzR!HlTA1{iV)Rb;0E8m!ZP1 z8?$Q;VpBOE`%cWSb}e9+TgWNT2qrsoWg%PwL`*!1AX!9Iz%Ex}h?|iQ&psBP?UChX z2u_<05hp-Gv%n=3ihXQJxDbB)3H^A1E|u<=o%Ne61}ME=L=tOy6@8M&Tk*KN4V@jr zQ`@HNYW2e1n8EaV@8ONvsf#;jfaExAZ!#;S4JJAytaBe5V7uZseTa0s^IuB&xc#qT zt!PL(UmVSlH$YQ;T}yJ>%?D)kgL7OPbot@*Pz`5GmBHi#S~JO;i)ci~LLM zxXHq(TrGor81T@whA$pLJB3)SHS*k$g+|_3U3-COcxZIPi+~1#rAnm)hlc^l7z$OQ zIJDu2s|sqR4SNDGmRP$zgj&0=2|rCQV4usMHO@bIH1rGR%M9lI+2V{GfbZHxMNrcV zu|Wfz_>1x?rxHD9Fr~obZV+iL>{U(Qum4TD?m%I0>`OvqE7j~RrowBlG;W;CvumUJ zr*z)muWYV4YS}`1GfS{3%O(f^)l~xh{dBX75$tXoJXd8i+Y4E#RnQ=CT{do@1_oH4 zh{Q6aU7qWF)XtNUU1SOnU0bi4`&5DD7Zjmn<}3o=?$IM3JDjr6iSld&wZ3rmtIDVP z`E6bDxI#F^3npLz-a>}U@MK+D=%J)H_XQfGZ_dMDR#!nESM0h70jt5o24Os z@2^s~#uL|!74SIzp&>gW&@QFc5Hnb&_KQLyA1?tFE&lg4G zIE&a)gr+lTYUjMv{zAW?r|To3^nWzY!$Z`kfd76G&w=EFvQriG45Bu~`Roq;YO*<> zaYjQ&L~3FUz0yY%6y1zY=9};i@(@u`ISloM>3ilVl&}HY*9+}5>lx8cDJYoGr-*N- zOeT7g{{Vh(A$>P~3IA3o>Gh-pN{<8^hkxI5-&goHM+(-|^kM2^zXXfR6Sn0eh}>o5 z!Y_%!Bj?)Pf^y3`Xn2X?)Xx3J)J<-bpeB&mxU;9@Bmjo&ZC| zr2pEn@Gl|S$bDRE^qy3jh>@Wdy1B~r2j&U^qqR(puy`CH-T4C8=@#YXr*~)omWuvt z&)If8F!n^Z(oGI=zG%8n?}1ANE)x}%=F0aClqMYJOw+<-yV{3qS|&1V!Zt>2SB0zD za10r0J{ac#XVQjmq6qx|sQi@Qq$uxT;q<%2i@YxYO)4yBo1GWZ!~d35M)H=B=pitM zP-8`g{bc|^Y%GUJ-L!Ajs9MTWC`5vXAmn}NPJ-;957DYJ@a>LsRKXQ_<5ly%R1$2_ z#OVRz9OgwL2xRQ^0d{8#VJsG%VMHVLzX-;-RHHO<6kZ$dxe9OGT&8T{dJrq#NwkZH zb$1xnww&zLkn7pQC4^s8HuSv+`nXX|%eRKhFD5s!)9Yb;!HYp>8*Of^zLaw8=WE5A zlvU?}L_xZk!vB*T`F~a*>lf5ZpYq+f=|86YKj^FZ%lcKo#9x#J%GNGl_~M27T7{Y{ zeKqDtbZ1(-fH0^M@mp^<%iMD+*Nol?N}K~8y!EaY@`rhVO18W4oT zfoazQEgCYf((@(lUVM6%+WHE%oi9mdzdqMWVIu|SCt_|-(+PV$j->yB(OeL4xxgr0U!jBb zK!G%a;-87};QK_|az7=}q7Jr!AP{f2V5({e9fmv}K|D~8*zqTo$Z=y>c{~RiS$@1{ zRBM$0oi@*-v%ExzDm=-U3{mok9IFjuIjPyukv=)?Pqwj92AlgRVAgl)md8-O+-E+m zCye>CU>J04I8xOUQvpO;p*O;(&jpyL?LF@xXvY1=%+J>?Pf&nHl4Z=!4vLr|bGGJ- zPy5T)QQ)e%S+fE0_v>EegUKrI&92bZm)LLdkc!P?F! zLs9+DH9)TGN1%13iwRYHBWxB*_=gHi|8O&g7kIRJ4 zjiir3$P4ok_7}vIO>{IUF8!`z*}Dqq*u`a-vVs>mc2o1g2!}?o1a|UdV(gyHTZ~AC zdZY9GiW}cKU;0kgXACeHJoKathpZTP)-z|)llS&-GeJWbu#Zg%{L$HE4P03w3k_xZ z$V}qPMPIuUHa?{ZiF`Wo)uQ)~Q-8?uDWgW{&-A}yL;Q=wLPdQ0A>uH3v##(?C7n{K zSABf=s}oMJj#B zBK{b-bUc#)Pv=h~@X!|-Swl;e2b=!#=f(>#R6b3M=7W3}1xw^N!cQLrsfp-kxP>az zU1@|b@PenikTA9Xohan%+`LL(@r`zdH-jOq#$skeH!5^hKP8tm0_1^fV&rkX*vhWG zOe8v!Kw3pl15VrS1`+{U>AKLLNu#=a73cNQiHRWi+q{J=)DC=TNzS`ccZc32MJon@ zyfo#=MW(UCYz5pOis3?n≀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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1a0db0c568e4697d56785a687649e98e9bacda7b GIT binary patch literal 19836 zcmch933y$}Rc2M){l0zQ^q%h9CA~$<)4o3K)@I3DTe97@WJzASZCPI0c9RZink00b zq!S1UJuH*Z0}NTd%u_dHvcM#4873>~_1;A= z(z|u*p1QZ{)H(lIs&t=NAmokngiykW^`q90l>CZWHNW%{Ay0nmo5WqeK;A)!L5Og= z=?ho?YOn6@F-7Lc8aYZf$uc=Z#!>H-f-4&+50i&LeT`hl zwJT%`H*Y6p{0*RV1D|tf`52B@%+^~d8KjBaG^r}28Fwgt56>*!^F%bE_;Zmbi9oie zrj9Ob{Pm&d37Nlu+J?m=tsPT4YaS5Y#`)^{<+bg<|H|`^5W=2D-P!eAe(m};>Tzv;6-V{_rN_^G!4Zq2>RCc6r!H)+Z75$F zd>^j;6aKm{phEq!@OIq06X%%=mv7v@_GJmrreDE%?b4O?HQ$cxMf*XVpSZksdz;SC z|AXtxI5)P|E^q$Ap)dU&A>)5bi1LN)E7x!Q?n9}+A!P11as4N^uWfEW^Yqs~jRC(A z=XcDpWBh-0^$SgBT!Vi{8ijA5o_y&)KJoANj=L}JmZTZs0BF^H(LfvFz;210kk0PD z_?<6FGv=Lmlf9p!SyRMR3T71}2~6cJl;3Ff6)a@`iTw(ZP`HC5A#bye^lPM@n)0?M ze@_zflAC<Rcbqn##6AoX15f`)(!pC$$TiA@ zjgT__mhe}>UmN}m{Poq#)%vkb_%|fazDb(cCh-eT5I;LZvO<}7*at|5@W(iRYWGFK zM!JOaq)G6TX6Y=+3Gd(ihH!_B2rX#yL2_I8Q_y{sMA#cij(v9b@7dQ$MEp?_5!y*F z`(Gp@bbuG=6U8jiBKpULA1tl^HJH33

VaY0^MMQpM43&VY!~^^p_geJ}0q?xNNp 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b94907dad11e545adaf8fb1aaf54c032b7de1796 GIT binary patch literal 19588 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 U3l~oPCkLN7RR5DR&Av(h4+#X92><{9 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..73bb54228786739b75b05af392000dd214486580 GIT binary patch literal 10604 zcmV-yDU;TBPew8T0RR9104Zz$4*&oF08D@Y04Wdv0RR9100000000000000000000 z0000#Mn+Uk90p(jf?^0N36~cU2nyy{*d+lr0we>0Fbi4$1Rw>EP6vS+41o$8=R*}^ zn+3hc0mA4NM9`-}$({ZG@j%KErg_&=*aS(2$~d)3Gt92k#-&b`7InLx3X|HXPsYS# zrfqCuulTw|%nnm!x)JV)n30ITS}I>-_J9RAL}dK?)Wl94B3xaR!=~N8$1}Iw(O%}y zcz;MzG>7;({d*FV_aZMsAPG?jk^~463Q;T&NHA@1t87IJ6^FXe35-c)QWLu0_O}!9 zPQ2qjU9U4M!b6hy03|-yPh7zk4h?gM+1qsFvQ@UW z`(h4Lb1&0Dj5QLfo>mU}PcBo^M+at$fRiktv*-f)Iqvyf2*|&;nJ0uDxm~0KxH$k# z(fs}&@K+iDo9fEUGHIlmgYir28z&qk67SePS+oXtD+~L7OHDenDYb5D;gtmv%^ykD z%&g8gE4j?B+pc{{)^^ISbY<->`)WfemG!=ot8~@AG+$~#Ie_xQN~b6=1cuPC3jiXpqLfZWv+c0Q zLGMpJaL1%Mr>=^dp#l3;({;fz<6;MSqo5lZMxoN^3?|F@FG%NbF`UO22nmr`A`OxS zhsYJmP?cJv1@T`Y01o>jL3MrL*A{<_Al0|9u>1f40-j@^q__W|b^jLr@lzz46TIgu zjc-PX4*x~RTTIUFta1)`2WZ^{-Z2Lcf^m4oM@XOx@p2C~_%sC`*q`?YpQAHZjqiw8 z_M(HPN@Qtg_MTL7IKu_Oequ+7wQsT}LNA#V2)&4ed>8WpAD`xOswF6yos%D01zJi5 z+{Me3JPgzeR)-70aWBG2fR~_pIDw&uh3OR3Md9M0lX1Z?4})QU4s&p)>ZvjQKfRT8 zF(^{he$0E-aFC*6?uKniwI zc>a%dv8Y{WPT85p6_wOo$@VVc9!Kh`BOKQVM>jh_fzf_Y55J&J`*yR?dy*$+rmNe0Edm)cR4ZPzRpDaD zysiCYmSABl4xSaHxoW|+;h_y-!#_)!QL|@VHBmTXbts%4_HhV;!Y#G2$`DztTj-vy zPhy7!yb^Hxpb3UkE{uLb{L|^4*~7B+V%rlzjpn-koB$3FJu&K=jVHD!q=2~*`J%ohg3;Udc+9I6e^ z<4-~I@L&>bV6*yT#@(4gbU`JoH_JC{q*E;O(t*=qS}+IU2Bi_I0GS(mBisNvZt@i6 zPsv8O06Eq?^pwXOLKsJ4fyp4peXMJ#B*;h$noJg^;Fi)^fZ z41~JIrRDLfKqP(Fu4|l42_LH5#W%(KImyQB;B z5Qb52sx=!mNQ5R%kD)2b*{nNXw&6JdE>}25gOFE12P_v9JnuZd(tO}@KL9)*0A2um zrWFEs5dgdx0A2!op_Kx7834Q-0A2xntyKbe6#%>%0A2%pt}O-d006uefE()!vxz3= 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

dZ8W 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 -0IiRIyY+ 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 I0MWO6lO0N-BLDyZ literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fdc429227adb718aabf201bed2075bfbaff70a75 GIT binary patch literal 20476 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%0At0b+{OCX_D`rX{6r`VWQrMATlEm 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 KKm6dcU;ZB>;KKX> literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..c4b18d863f31c568adb0b8de64ff2368cad1b656 GIT binary patch literal 22844 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4318d938e26c1dd40212772f4c9984b7fbce6adf GIT binary patch literal 19868 zcmV({K+?Z=Pew8T0RR9108N|#4*&oF0Eb)v08Kpr0RR9100000000000000000000 z0000#Mn+Uk90p(jgAxcj36~cU2nvDN9D%J(0X7081A`0;fk*%ZAO(*z2ZBfpfeITw za24#>2yO>RMEM;if<7!#{n`KD59Ao54LhLB?=2Ce7%svjYz_gPqHyvmo9Hf`i>0zW zf7tWi?X9x?s0nXz2KTd2dTNT-+S6uwVq2GLs7I%@`ppP}T_K`1EmLr-GRPrf7W$kw zBuZh4*YV%@7SZDP_>iP%^6>mP-g7_UL3p#HkQbMNT&3apx%J=s|1a_{3K(o-8&L}? z)-c#uK})qLv~>nj+K64JcSgnOg=fW;_LbLOd8E^tS*;`!2`saa%>gAjb{+|f8jJFP z%B%Woy8pk=t^VG#e^qDyZdE}OOyow<41zEznBGv`HG9}|d^vnZ{2hOxad1LZM<;B^ zrp=+HU$AIRhj#Biq-=!-z$A6P{+BK7y-(e{#2vNdk`7h!TI4a{)M$?>B8-nK zhahuZnjO!R2Ydf-w>Y3Q&$>Y4z;a12(jbfC1prj2`o=f+s;JaT@G5 ze3K$@2;wK~+(h?(s+R2l+!QY4>Ky10FTUQX>@|N#E@y^XEe6!?4zLN3E&$X9fYP1- zas8AoNDev4F#uEoxrv}Ih!;b-)jfA1#Ikc++Fi(*-`~w+K!pM;z=O!ivkmkMIZ>j(l&mcU-0Ff&b7qw?AXo_&A~=F% z%!Vfr#FK}a<7-3)*J$ zzV?+T9(&}0gI`yhA8%;^6R-Ayg;Wv4riJsz0CeL2r-*c*P-%1qlf@>Eoo-JMCAqH* zAb?chX*yFi-7qcNaXmi>qc};ke7;z&An6K7%5DGPusAZAEmm7*mOVSi;mmcpJzifP zlJ(@{EmrVAKy%hn2!gDc@I1RoLIjCCY2aKn3jhDg7(FoYiRLlwKLPOH@x|rym_}g ze$4&X$y2;Iu_^{uFIlyLHSc3z=P#s)dxDq>-Jy~o@Mm>Qr`I3`AtriYh-bkM$BoH7dl&j1zuNHAa1>z(D14kZY zx<}!fK`?G}-~J0zeX54e@KP|)Ys>`IK%0ALtOd3GvWKI8G&LgcGa4#doOE3|5h5WZ(qivDS74;y&{t5eC< zL35q>jAkR~q&l5S#_`i+ythaNIAT30;9x~bm`;H%TNUKuU7~4G167Mu3@oDxSp9A- zZ^L3bi_7!Bok^Qd!kx*19u>M*0s<9tB&q~SDuZN|qQ1%^Mdi>y<1 z*FEoiVPlD(YCkj~1VJzgL`ai@VB37tUc)9|i{of-AofiZZW4_un>U8^8U)%+Nt`l4 zRbPs(srqqbY{82T-Y^&)LzxZYFIfHX^!My$O|!Th$Wg0F)gL9`WWE`g)0}7ni)I$6 zy`~M8RFXE&snG;zNqzO><l z?^jtwvpcc!_A@Sha5f2A*cd))+^rGf2O{7V7WGQ@MklFCZo&Gz9k&7I2F7rg0Pjn$ z-rz=wv2$Q!eo^j*El_3c&A|4aMag1$aRfSoK=D0$f%JK22I1kTD0^$1 zUrc%Y!JG5agvpx^3RZ7-U|;xF`GuAD=5h5a_|ZMU)Hv)!;71=}e z0QN8d>=7sr)kgvBF#y=(0I(;Zbn24;_7ni@X#m(WP)7Ax0DBGq_B;UW1t?K{5x`yo zfV~XBRj_#KJP4NaigD`#f; z25{kL1ee}|)xmjiZsE5bDr>5 zsHTT1Tk7r->th&~!Kb(JIBc1pO($rAkik_!CG}kmN*tROBmH2oN+jVXh>|4n&Pc8?R>Cgi zMDSEDwq}}7DlrQ%EY9E69G@F2ukkO;jhFZ-HIi(zJyq;UD8yC|D;=j}Yg1fx7WjK& zmkSJ)b+KU8|19CXD2})ez~d z{0_{wbwN3)Gv?}aR1YC532rhb@KvEKihU2cj=PmK<2PVAIOjqG{R}4KDb^(Q#8eTO z%ZFezsdV0gd|ahCVZ8DTQI9W|aM;d;0T`FbHqIy`jn747XB*@+_l~r;?(3Etgy8f?{8E4CkL*p z_gG>DDH9K(Cn4n(idTmi`R3NzDyfBvCSX_#&GiY7gnkB|q@wKKi|D%;4<$MX3i)O* zQ__NK;<@ja`tPNvy0s4ui)bi0UJ&-iwX$JC*m3<9FibA$^lD>UT&ii%qfnN3tRb1Azp zGy9YdY)X8bX@kefkZYofs761#BY%zKNo6QvXXXJo~?zc(Y*nnXo7gv~Aw zxsn=d+Z}gBlumyx8*oZ zt}UMXL0SSyMkV$bH$B$$(6}C6$}TVIWLzF1({H|v0_up#0W|uyNi_#|uVO;Z&$;HpHRPu4%L1-s^SBgpDZjRcatULK>PX|U4v(E(^;t)Ff@cEOhd0>& z=zKa>2mK4jjBn(WJSjkQyNnr1&7Shp*csvQcOcx6iR<)q{N*7}bz5v-)LhD=qT)ew z_mtcFLXzk+O3rz4y43RZau+Xgt_3UTVdgI2if{{R=x996J$0g#3@UYl4U+j6_r?7T|dOR$B-s&n`d4WWz8qwkgkMwvHb2gckHs5I(Lb+5+zm zdt4k#E~>W(yW`)r+K5q`s#nYKblDEulQaE1&evh+EyC(?s7Mtm6*V#-O|7R)vYA~N z28i*U2rxdXga>L|Oo&dH%3G!QlL&$;<_DYEUBcNR#l9|!x>Bb~D8?M@V9TS}=1LC( zBkYeJO;eBU8w1u%ODga4N3b*hN+6u?#z1&$mBx-Pn+TMt>3N?|CYz69bz9`u!18E2 z1RLo*p_OkVPRb|zO?WEl-`o$8g4+u!N06Y@6`Vh}tId++lCHBRJ!|sTEXS_K~p96-;D^-t6ROGTB7l9*L}l|I3gP z-pR2L!|!H-1W0Dmc0oe5yR#7444^5bx$yuoY6^ogbUe&$KCR3My`-NQf}h ztTGzK&z((^vdxr_VO5#kT~(05P9`8#48KZht}>GVKE9wz%&SHt`jZqRlK*8=!650? zUhUTYJ5s(>#$4S*#6fl$11bUGrh+)oHsyqoD>h|WIVkcqvn$e`H7vWW0Kh%j340Lh zSo3{Sb&NP-sLV#jzJL6*v1ig#eLO~(`62zKIqVIn%|K^O87@kB^A+=t4gXkQfGV0Ta;Vwe`Ag$X12Yx@l(bT>P z*Riy8ZkvvBoNl~DcrJs=#WpGS!aYs33`lmlWVk!x)45;ifP*0A_$h1)^4lV&XPb!X zGi&2?#^rdu8QEn+XGkP9g@{6Tg;UoHw(EF)jK63BYR@^Tw4;v@r`nQST2p$OdfB>+LjvQN?E-jICc+CKP*7cSA>?W$(qNW;zpQ!=#2Ju#)KZ@+jC3S78THd%gZ$5Ubaw2JT;-q$my& zyaP94SKe=y=C6Juw8*tHOBGt{5;_8WBOffWUp@+c4&h^s!G)xlu&O7ova%?|Z5lzD7Z%+I4@f02S{Z9B z+tYt1Ze`Fwux0?U?;I)CxyV!t!hNExo}}%fh7gfE5n(c3df=rVL59AL@zd#FffUB) z;dv=_2paTWC^o(%>@G&RRcfKHDg|byc3CD;5J@Uuj@FR4Vd;nqv(^V!=k9>{;=#{& z8@5sLoN;GIMmdTuZfH|6vzIR2bBL982_oYX!5yW43ap?2kma))qpck5I2qOvV=V9P z9b7TDtY}g&BE5p~k+hxvy8U9>m3DS(csquibxt|k`BV-WJg%hcrHbK#RV7sJ{#>nQy*Pp|g-rVe}^k5{;?rNlpWa-P#cUK`Q{zO z0_3d1_|=*gZwLp3Ddd0{OG~5MwR`;^x)xG?CPFCx2W29=XpL2YGP?i`G53uI&#%|v zRI@VE4?C#cekqEW3DnX8Mq)^{w&|50I7P;GBFvIRJgF2)C#*pzv9XG1U*8`vwsWoj zl17d^J%0-1z`QKmgd56WpLmgDR2pgJEU&|PnI4vxWE+CcJ!uym=z|6|0WZZ0%76CR z|Fekm`E*=nWPMT{@n#D;BpAyRPcUDZ4pb<`uDrrjE~eti)-=U^!lpB9_#3M7O4kBy zNkOrwQAI)urWe&)ROI3w5EP{zv@nCN>|+1+CR$s528gAPQvJ3-CGy1-t^s)mG5bb; zO`wlI?z6thHjTJ7%aqS$nOl4Tne$%LXW7P%a)2?>9Jm5xpWR#)#U%l~kJc~UZ6Bl{(XJ^9hk@@gUU zk=a#@bU+B^(p63rs1P_Jqm`q6%8U4Q;blXo5XH;u)GrpJE2~$?=q?oBWolKB>C!0tJgkDC^pA4`wZNAj7mD0ZFj*NjbemTCAWlnAJSb z%FTzhS?=k_h2(-NHI}d);tN}8P7)=dn^DE% z#TRF3YuIGmw~d&WFIf}gz#PdFZc6KUOKh)Jqn*8FGE3#tv2M^vW))R+xW8=X({DfG zvRBiBAfsv5^Q0ZbAYA^N3`6Sb;)a$Bo)R0kRcPLuf|6ZZGLpn~7dUG3kzlzyLbaqE zuMFUe#5J=f$N?~l(@nvKh8$g7$R*kh7eaBOX(RDM4yD3N9;vJ>m_DP>;+1>Zc(CMl zMiPWd_may2gC}ohxfbG%C*k0aSlULqTLQH32Woj0a@U&ds_NnDT8$JQ;#d6cd|a~1 zr3HA(So8W+QIIX~oo;t^vQG<5i>25zyIQ+F1{t&;2rW_v=Mo_W4gn#ThBHg@Vg=R? z#p89kMWgw1R$PJE)w%eh<|;F`A8y)l)% zjo64(e@I8~#I!L=gWSysh3~Jp``!)3HreER%6`Zu`WSm?bH&BhtB(b7iuEh_S>Ct< zOEPVYmPd0GJoUZJzA84B+=+%d6|ODavj-X@!}n}VMuY%cejWt*I}%x2-- zGu)y?TbDIoPViO!SvA5Xb>$2p=zRg&fQlg^Irm7?Gn`JwOYNzaI1ct{EpFen<0N ztJ|xi)U~KG0@ZqPw19J*d(=xs{AWXqNlO$V;`z@kkpv3Gyjt1*Qtlc*@iZJ%LjK3x z0Do!;rAUYg%U?+>A_cXcT1=(Uq3!dzI}FzBidlP60)?OrM%9Jr{(k7w(u`_TOn!=G zJ_?FI5R8rENru;avq~EH?FPUHC>j3z1)b_c0;Z3A0iwWO=+?kNb!bTKDOibk=kFgsDMJoRGW!JX!0&HY ztb8%A81`{?ODAx1GVP=(yKp}gLX?E&keJ(#JToI_5XHc}$%BWZnrO(kL>*;tKq6I( zcq9%p!k>9{^OXl+6rigd4ydEN1fTbOxcvV1ZFc|K%<3amsqxjmFnwYc*t9V|2|7Vi zNMvb4ltQ&yh8&BR6|)oxZl?r zjz%FC{>ppCJbw<(7zq}Og7Xj{G_ZevdWm%5MPv)w{UU{ zX?5ny&YX6OeBGw%+y_$^$P6+W!0DvgX_;~y}YL8{-7ao`3R)OcHI~8 zQkEj#=P1uT1SOOFL}D?^GpnVvoKrPP3}DOHKaYiH4HtT%6~>2WP1qTftsqxXcVspQ zQsYk@4-sP+i>3)7Lkhm&R{mOd`&j^nGMIcSaJfHGp}{_!hRR?)gjDFJML2*9FJ>@S zIjbH0VI82o!+x|m#wj)$bJOB}7#`?%=D{t8z`#H)7bz*0dq#T=w$BZ51!ey_GKclG zqooc=RLMRIDSEf4Hm%p{E3*czeqgW==?AAHB5iBNVzR2!; ze#A~zrPMDRx>LOZ4Mw(Zwfu1Ok2b-b>&Ji7^Kg!xnv!QoJex~@%kPaS zB!!x?e{n>n$UI;=XW^6U8%2C=$G_J)N-J0+w1w#bCn_SioUoV9WGo#pFF)^&X_enxy~ka@u#mGAL;b(T5LS6iw9*yL3|?kC~jzWjPeWvUvr#d<^j zpf-}<*es)U5&1=j-_m&jlrIx5?rb3?-%IpZ#_znrMAw5!;okVL!i~ZJ zkH#$#oq;)$&7uISpK!iJaJnqINAsmvqV0#mB^Ch$%c3$*z?~_4I@&NRSFboE58byhzjGzI#0w|FHjneJKC8H93wfb=~VuM2Mo#VkL;IiWx{Ui6XAH>L;{t9>P( zw2eL9zUUy>zWn;N1m*gpCou!%{Sy?q42G}X4~#&XXP`NF>O`4^f#0IYJb!8i?|iWq zz@V((e*-mHHFlU4?P%M_h`P0;tDDkQu+f;bOqpL4?KOm361c2+>lRM)Sl5dnDh@Q(I~(pxu{ z)*G0ThsR`=R0HKLwJf8uXgO1OCqh~A58JWrS}%jWw49x2Vcs_i&595V-lZs)OfLDK z2-=W;>wU{T_4(dFYzYeddqeD}CVt~hx||izEpXFglf4HSdIN6g@(s>iH;L`x;xhE> zM29*IFqz}6hd3xdoGjaePUp`0crg|F1V8BO%{0b6NTXYW z`V&JeaR6_Ro1c2;j3k}&#?69m0-gfrUtU8Zl^o-7KS2l@)luT{Y)@VvANbc4-HfWo zdEqyd0<)i8>f(Pd3iiRZO%1)|su;t?Jf_DT)h@xgzkK%#rA196Iu!P%_{Cnco>*29 z$pnku%!&6AbMfzif54}n{FqJ*~`$v1xCT2<#~OJZrfy^`9l7y+jn z#f?$zo0iPE5*-Kt0+A!e5lr;n0$UeyWW3z9dor+EyKm(QSDZ9FTiP~_J$v7hNk2KG zoiX53(BBEc3P-*Y0#DV{H81MP*wTEDF(aS(mQ$aY^N~ZH+L3JMb#7pjEM|*|y#()R zAY^r~d`=E4bm&pApV+^DH<$|mC!cG|{=16yR@T#dT+J5bZ_pG8jkASO(J#Fzufg!Q z48sLj321anVO~(MJ?PG8|0MA?356Xw_N!V>(A9#tzlc)o)e;*&FMBwsu%nojWASCN z+mf{dd2s6ZxjRbP^y)tuRn@*&2BYb#rx9G$MXfs?`dKt23I$W4HboQH;NzV@>XYx# zF%OAZNL{lQTz7{bitLS))7%NgyOL9Z*3_RH-V@iD99|SUo8XrGbm{&MAW*~AcQZ3% zamv9DiqbV~PuPZliYTg`oKGh~NDHvWT$En>R26GyeJDK!+ckm zU+Dd*KyrWlbh$1*D?L`+NSJe4MJOFoC+SR?DHaHjOE9*8dQ!-f6GhU+eqO89VsV$P z>MEs}Ph97VO|GUdP=5njC##(Qt$(?Knmtc)l3|Q1rEt`3F6Mh~II$r!p9(NQMTZNM z?4Dv@uKsq|k6)LiE8Vo<|4&*@2$zzN1b?4t}%zzxGJ$N2|=%+H}>@2Eb~&5;pIYkjZOR<*P{` z4d}e@7DE!>5pZQZM{Y5g3MiFKW7t2p5{BtcqDma0vYd)XS6mAn?A}ZAS3E}Mu3V0Y zhKV~g-wxI3*;%{0)>G*FWnO|1*!2Ho4-Uc$7ut}C$*5mb-2Dd#amSu@K{a$-7Ul*v_$+ZazAUlq#*03HZtxEm%^yD}J~W+2-}|-{CM29O zb(eTEJ$CQ%?!_`PY44%VPjsI?>u8q19z|taaR9=l|7@A{DdpoWtl+e0nY9lN6pw`F z_RWrIDZV>G3fN#ALX%w>R0%cQ@P@z~G#jH)zi?LUW+sW*PY0X)=pn;le~B?k>1VEY z??2hd#pCU-7IRr1Rb$yD4H@jgl0Uy8HUU0_2uSlGQ`Q9guNSJ4&tI&2$Yu`nA?3n1 zJG3lkQRmg4?pA-py+fzV;CNTpU~h4+a_aJ(KKdeRYDP|^`N*3%G6l>a%+f0&^U9}T`k zyB6!0Sa{Nav2VJY92IP8#06vOQ7FR}=J@AGU-Sf~mKux!rdC(Tl^Eh19g51TS6oW96jXfR zNeayHQ0&QVn-_Du)d=822=8S~N7Qug)lHkwz&y5!jBagqHpb zt;r|-BYHoP20h(7I-O2p3SS9nGdRnaZXKDvn@3eoyQ?(`81m_-4~1RUkl}hPwaBha z#1!U(UZ(y*bUO95-9cnL&G$ZJ9QA z#fb^*x03FUKF^BRnXkBo3Om!m3YFmrhx}D%hx4wWe`IBk>$8bO*J7>K9`e3Qj+-46 zrVfB4dL+X;R~zwS?^2s~CQ1%G|Kg`ng4;UtW@!3yic77cYW}#td1XASv?gSfNUJ^}ax_d^P-5KNtO= z<(GfD@@>`8?5L$`o5m3?_}lV+cWdif0G1uf8dY&>T;qcbALU5{y%}d(|CDW5VVmWY z@>ET$6BWL1sfAd1UP`Wf3#WG#-=M@;)>JbcCd(@e+p*QMKlii*5Lor}Fd& z-Usf4kVRN)jQBR^$N<70EQWeG>7UCIiZ zYz@^cTrwvHfe`R8fUP~(8D>|}!)7&4kqItboH==P+t6Jq{S`+@I{jZCUq-UKo71cE zpyhgI#-}FhN~EZ?d?QtDi6EBBx@6UwO5gKGTl73U*=!k`-eFN`sSacDw{iFWY$?AS z7&YRM=Bs8<*_*%HN*L_nzZ7;bn8sI2cQk=m0$?YJmq!^{7-{W>@wM^$taJl~HFI}N zW)YyLeIO|l_deK{$u)jke7HLK$PqxrU+tXT`))U<4##ZaPlI%6U)g4Sb2H-z*= znXCGD4VP;UDLQiTP(-{3t6}ZoaSLMg0BJLlBS}aKos^T=J;$wZlM1f@!MNi6g9PjR z6P087m52!RdavWe&Jj{nq!qonXK9ogF=V7i`ABBb*43h$r4UFyT2HcMdA0%Vedze0UMl>AVbN8-?PZ9SaYi; z=dnq%H(h*SNy-DjcFidf(6>fZi;n!$l6oarWa_IUVbGRYJUcSPcUR<81lL?0@^f1_ ztNUMW2>O&`r!R=FS@`3nsds1EB`U==Bq8q1hKV`>ws+H`q7X^a$F{O~72*1!dekZR zk}MTOHO}b$U(a=79G#;JrHU848a}?gTT$`blgQ8YZ7KEAqnYsq++`uE-m}uUvULJ} z`{3?v-_8|?sNCK<1!R<*Q?R~uu=3{B=gYs((QWo-Hht1$IA553Wi~(Hv_j1BlE39& z>ZXfPycxfHbkd0S=QF_m{kX!3q%av8q@EZ{1-RHdQ$rR@&IEGz-GH!;WIYopi2Y*q z*8OvjA8lDiBB|QqydOC< zdz?$)wmowcy0fq-rM7l&#ya#%9Zap;Me|($=_TC;e7=QeR@5j0hV7>kX z3Yt1fLMn2uvM@GrFvu+|Hb>#xw&ChOuUlwtZwll?)PFf?9w^(POalt_`+vT)Fi|^} zbmEf-5T_js&za~uYqnUd!8etH>VM>w_0R!ad%o&~!2D=M?`~;=-qet$Ub_WRl@wISMjpQ!H#6@aLBU<+ObGZ4zX8pMsC;$iCIKyra0R$?WB5Bf7uudF)b*5}LvX|J@q9TN@=;5-Xwv7*c4fR=$Uz+RH5`m*I32;<~2_V-QVF6cv)-V@vEbg~Oq} zrH#$Dpx{!Fhe-+`Z<$$xwP6ejBoQ9`ZByl+`@7Rj=68t3OI>gBW@h+y6!gD0i8zK; zyO5G*if2<&c7Fbc955tbfq>L>trbq0|y*;xzm2kxr=4ErP%Wa7TIv4*R#XI&w(4YypPi zA5dy%zA0!}`}osOEfapcE^k&e#sV1i2G)(?EIKm41f*KUUf$4Ba1aHu$VIa!ZVx#p zN1B=o0=psl&i^`POeug1;R+f9klp+Dpo80!3l7O~;?bMalfo%WAGmb2j+L{#5?rtk zc~Z3FZtuqcg+U4<2PLO)sFU`; zAHCIiXM!?-OlWv?`b-4F>WJwLDSk1x>AS^4rlswj5bbEsuWYaXlA}}rgrnNxOe1@O z5o`9J6v3g_hmht;A&-FBQa$uAdJrg8o3ipSw8nA*CIQ~Nj(r7&vhdFsc%fQQ( zfgv*+7Al*RN{$vqb4s9uy!pVn=iBKX#N>b`oJ|GzW+@*d8DOlktpnmU&}Rn#;Q~gn z9;X@$c_5zBQ>q^1d=pVf$8vZy_2LnuJ3kzegEDz4&Gg~KJ|tOZJ;`9BxlK);b8 zB9nbC|6%yLD>r&JwekJ`z7NBP-wS>xXzW$i4s81)e3ZhVZa=XD90qhk(b&MEkN~;P zUHiSxO!RCmyMUrhQfx+lDKI6N;`gQ{P(T6&8rj)l`F&Kbe%qI zpfrEkb3G_smVNYMZC>yO%^cNN5p=q2wTKFI&KPo@HL9_^051Jj4*)G$+C7s)XqE zh=2Ex|9?+Z0L>bq2$VbZsfb;MSRw$UuywXv)XRP|}L4MkbDB2*&IOJjItS!lrUyy|_lU4Mb-p1>UOgBIV&F+tUER|JeHz zHMK*Y36-%2rj|rLFA*QvqUeOrel&D8&4@u#5 z6%_vDu(2uRa2ECi}A+g9KqMa(#d&+ zp>TC;stBdr%uuet`s^DyltqU=-GK@4f3hqoOXFwH23&NwhLdySKIr zV!*Wv-wOrAIL}1H6mQ`3&1X}X6MkvY&CqTqh?c_QY4`5Ij@7L+>T-P%ON(Yw6R&A5 z_Kzkd&kQq~aEz*-UkiGd|5v$vIWJsvcUD8~UL2dbv3$GDk2qEmeo{$`ay1l^kLjs6 zSxgKlB9{Z5uWZb58P)3YuMK5g1 zV--8NIiq&6&3`W!y|Zfg)i)`4o^8JEW0tv-&BQTMK%p)Errkd}w>S9zV-5GWWC#Bw z!iYH>=NMr0obvbEW2hBcFms|gks5s^b#`q1`t|zOT>_M`HD*dNQ#{?Da^TO>(Q7+k z?{-6CQ+g3bW{z#&a4T4T=SHra;;0{vnR6bSS4t}svPry8Ga!#4oH&)@^V1x395>^ZWYz8ku(DMgE?XJZQ}@9oOa)h2vC2%Gy(zQ49Fr_{?xd6eRusq&!?o zsIdPWhCoWa;zU>=N+MCzYM4Rp`yWGZkBf9>K2D+{iWPy?p7_Ci?;etje<=bB7^u3K z>g9Z5F$S8o5Ridh|5N>hi4h00Dn1DN|G(T=fUnC5%pTSY5aeWKhx)=D(tse4f(PT3 z`js*npfO!axqZt+bYO(!7qSf_4J|_fj{n}$yCT3(=Eo79)w$b}VzJo#@NfAGXovNc zM<@i!X^gKbAnmW^9~V%QgoiqhU5 z`gU9^$r%cOJ%W@O0a{H`&J;FTxC@)@;l7_KS?I4Smv2t#SqZxNCOv}_5) zKSRl9Mjhffkd%&XFUtrfe>Sl{B{w31G9hnL5eeSmY&W<4bJu_g2mnGtBC7Uvu0DII z17n_Emw|Vl*;}X;1ml{(d+)S>L~z8w9Al0qw8Ntq2XHK383Vum{S7a1{R*%Jp!}MU zbEMB=sMa!k$`nauSp!{^VK_jb45CwPE- zM;8&UA!T~^P*&1GV_-9Vj#uV=AK^f3f(zSWj;7@qF|q<3aWnpGcFbIGaL!2fNatD~{LvOL#m z%vi;a<(K;`inD_qTUc(qwsVfB{WClnTXcp9MO}`VJ{>t!&MTf1F5;r zGC+MTx!=YfdxgV5P#0Fh79A+@0z;^>1K>J>`>MrGPYlL2g6SwQA_R%GcZI9rOoXGa zJ?*Wp1puK0MqKXfkUpD(W#@pr0i*sfWKH=PI!H_bBYB{$2M+EboCd-?;0KMD)YWAo zy&5BTAgCpmKFLxjfC_2HNOa0NzuVLt0F1YA6xH@(TH#|i#8jI6&}3i%xHEy{C;sXK ze4Iy>uS`k33`Hr7s#11bfHKkU^ zRT0;+Wsk*zbbi19u4oj@ZHt8K1939-nGm9soeIc&Yszg}v(8E~P_HwcOi=N8(&{A$ zz2DpAQWzWU|VH=FrnN-|u^rJ0Dk=owzc=MI9#ty)xRn^Kg-h(n0Wsau65dH}w-MHhYK7<($5t{7ArDFu09+QAcXxgvKci|q_picIfv#-gJ&3|-q+-NM79Zr%6v zrLmY<1B>r-HM68yyAsLXxs~WE4P?xjny#7?K+K0WETU^78LYB0nP(Zmo__0SVBd=tVUHcb>S1R59E0a& zJkmgWaI?sL*JNuetJhvkNqXfLW!aG4VmR@sa}{>TT~rD?Eb#CaggmxT4?^LLjA?vXC6r1tUK-Igs{vyRt>2M zGV@qq0dEbE@;vTLzI}{=xm$CtJcYDB85)ZrdO@GitY}vcWzB(?Ud|abm)AgyI_79; zQ9-UFLU(6scxQ_I<;SHA^yZ-5q!UsO8KKq;MM+Gv&PbMb<|fP?%jV2o_(CF5?nCnt znM7B%D4DWpWPdr3qA1Jexigc^g{=WQZp$!NYXE`R>b1Q&F5jQh+1^lBRFJmK(!iUJ z&9a+nnDZjG4?s033sS`f%c~ZQ5S5?K_W7OtpriXYc6WJrwR|>FJ~FBqVM=RGL5$D)d$vzIxRG5SD2s(N)5 z%)Y(Nfkr+R30^LO1D;p45Wm0t(w=r5J1E@toOeACHB}2*sEy3A)?hZyen;+Xn zj*+OS$xc-|1Fglimle7~SLm}*(m`@Eux2;H%t&8b{Yb6!MRK%+hbt1;IV@|2aW`7D z+$=c~z{3$8h6Sw?36oY^Uth<3ociKZ>MLjOD1xe|H9gRxIj!BV_ECGResvi854s&8 z{)uab7q@f#%+82<{<^PRL*Z{kK+E?Fz1HS6J{8m607CL`Jkac7ZEr zXnjj&mP;|0M+2VXh1NIxSd8qNn+^a1Kgk(Tv01ZGE%3xr@NONPH>ag(Oi7+M)0(z% zl(KBKCw+~HCj#l`dAZI^N+`5EjpO0&$+bX(VHKue;`)^d+A*8#r!Lrlms_OuPa6om zCGj_GTa9Xfr6%^RTODoHm61+lDkaL#S9^L5G~7Hyq*{708Bi!psl3|VX7iT#znuMf z(Zo8$3Qae@tYLAL5sfWs$e}oRBFxs+`Wh#)PUP65&egxIaZK``E965(;9!5vfg1Se zizd{Ql}8`Kh!;fqi=?eEg-7x(pFku;BLj5l#g2tt!UA5qC#unRMPL>-jBJ{BIvL&I zr3%098(+S=V{}3tN&grI_~pOhU9)z5FuAJSY)V-tQFXy*_!)h2Md=?O%oNJ7$H*ol z#8mso(G%*+5MT@LCZ|G^zIy34hqVP=eX)pDiIKh#MlB5s?omCNF*Fn4v0vhU7A{tLO0HG=%u2qZFd1 zh={$U=H{Q+LUK6$wqYUmK!RkKk~e?0PW?Hp_^(x~j;=nseA(2=-5pI0Y1_cp)u`f- zT0C12O{gqA3P~+$Gp0UQz?n83xO0*tHMa$i8Nc0;ooUQiEeefyZr zq#tpt&)Ni~S`v~q4-~U3s_0DfCp-z-bclfs;HCJlx0V#8tl8&9`e!lmo$D@JjAc$r zb>v4NAk1O9ei1G3G$t!V_r$uD8oe2#OQZbrby=VI>gK%P2Yb3}tHzXAOzC@h>Y6sO z<6mzN4Myng=E&8_u)dTP2rl*^YeofivoyczqTN+axtBUM=nuT#nMi}2nn7NwnDK$W z?uW8yq;Cdm2 zrx7!e($QkwudUG!5~~)KTpf!#eMcmzN#J>*DOy+|YcDqlt*DKTp~;lf-|XpVZ)t97 zs3F)4VTDUaZ? zr#QxO2XEro{kCnXIM`jVxUrkVCEn*Chv^!yvB|W|RmVWozCU8~ zNUpJ4UX>`xS)lLW#&zAYz`SeQ9S$4ANT zur!!i8)z7NoNly*m;~Fw?M&>J%a^8%=^T%rWE{@MH5^WsI>e+&<@n~TjQ#wG&MMW^ zk-{xlWvm-}=%8g!i$tZg3QrfL;(7`o~L>kOv6v3s3vcREXROQU^ecPu3irW0A@Q1A66+x!I9ZFe4eBTB4V zZhg;}3l;vdDmG)e#Rm1Nq&%jahzji3+FHy$U#>I99uxX5WLZF88gcB?dd+7RA}c+l?}mCTM4t*URV-k(1*emyS7e) zF}k`XOF?Cq3yg4QUn4eVJ*q#R+f}9<_aEYf|l$E$b#Hz2Ag>PK3Hk z5t(&L|3ngnoiRoHGjUD~BC>3?S(BDYR9A(1y%~Io*%c~gF{kuk?n&KNW1wzl<@%NB zYgSMEE^zcrY4SYo@}iV|uIx+<^+Z`R$z)&j_~+0KZp>Z+)0 zH|@X1Cc?z-gKO>iWnxwJ+(=K=k|az@IKEw%EUZl#x;NaGkmlKSakwrwKHu300;o|%j^FNJM}*qFCqW0Wb5zd^nz>#_9+CR{88H|0N^K?lIeE^{V@K2 z0;$yaJI&=CA~>}M;H=bLgwk(m-9oGx(6J2`M@Z4%qFkv_LZ>i)s8C!bQuY+9yK<=n zilNxf&^<&48pHO;Ez&HypAn8On$}4f2L4^9pf%`&!_+T;h6`-y{-djLx{`eQ@uvxl z6pWE7AXn(pf27eSuc7E*FUsIQg=GD_u4p8&CFl|Aj&T2*-(cJ7aRKsJ24v;edPdk{ z6PUmFM^TY`BEpJf|CuF=BUat_xoo7DSIlg*meW+U#>w%1oRfcXq+A3N1_=quD2-oq zkfGlBACS99)HbNi+g*OqXoJ$&1?12CB>j?m>HocwNJv&jYC|=E)VP8C4>UJ46sZ@2 ztW3|aR~T0KsG}@*$^!MES%{B3i!#!k#R$2a#Z4+LlGxa$EHj$4$M zUTdImQV~Fw3jmTuiWga;5l)tIDPdX4&8jTxAdj;gw`tjWD?2UQkS}hw#c$QzJ#DNt zkJ%T+Yb^yALUe% ze0b80rR4m2y9~B4f|1U!wz9H2+b6ZUf(wqeaCq02o#rWSua~RRh6$@1xHsf*sww9t zdxY+h5A4UUD*>s9PLSN6{NSJ8t3Z`>AxYk_LZ?Q~o1HDXnnIFX@f^u3L4kGP$|8Jk zJ}K_g&iL)Sy6$9sjiF$ysTJ%&c+X7Ob;WHm%#|-J_$uS&s@gjHkhNT(tXg=6HLHSA zPqD1^EcrScqV*1|YIPqX3+luh>n!{c?^o4&rrdQHdoQl(5O|me!`e{|B1ak}@=t~D zEqjzj={O>~D~hQ!7$b^KhvvX4!r>qu19Z(E%OS;{8c#?wNf%3%uK7psrbfn*@4N*u zxPCW7ty!~f;!Y$8quqe#;yDz8tlqm@5Adv|8^d+#1G6%nM2bySN{u6OBuJ0g)G+_l zvr#VLB+NYZda8)MG$>NEp!2mE>0rs05UvFG)R4)axcRdy4-oQ#r`bM?4hDaOR6}A) z`d2;_N10v8*QeECi5_xo8cx%}ioqL44n614`1gY+YFO6?t2F&EHeL$8`-Kb?7zdu( zYId>FMLL&rfS8*1+Xp?)QXF23{>I$Ba4<=fQ*^<-=Ms~Kc;M7TPA1<77&MB2Ui zJnCRui7MI}Hb z=CyTn^$0`~Szid0`rZTy?g{76XjjcWV4irvZxOC;( zjazr_J$Urw*^5_i-hKG=<=c;6dk05BW2N^I+E;riuaI~$l}Y>S TnS<+ZgZ~G>KHm%580?|7K50xN literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..80fbd022363e7ee84f211c9f814ffa479d588815 GIT binary patch literal 60688 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e10722afae5f5f0d9ac4dc5245d445db9151f2c GIT binary patch literal 60468 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

0U>End_fG6~2M%=g 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..43b361a6005e845717c8de2fbc8980830acfceb2 GIT binary patch literal 35480 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..af57a96c1488802f4a5a3d59cac03ad04860ea84 GIT binary patch literal 29492 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 Xf;9h=;B5aP!m4RV$0k;o00000frDRh literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..fc770166b5e86b6a9c18440231ec09449c89b634 GIT binary patch literal 44132 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 noxukIgdR#W!k!Aw*ZU(qC&D3N!YOEao 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..da5797ffcce7d6bcf6155a5744398fc92ed15cc4 GIT binary patch literal 67996 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 z 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 GyZ%3WHxvT^ literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..37db672e821041b2232c741848d4a37052fda363 GIT binary patch literal 37620 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a8b527c7ef6b56119ef869c96947eb0f3228c20f GIT binary patch literal 39744 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

u;albMjYz@PA_< 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..8940e0b58013e7002cc8af7f77c2ad78460f9411 GIT binary patch literal 23192 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..15cf56d3408b3d1afa9ccae05dae5de94e91cdce GIT binary patch literal 20036 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..64c8992c477ed0007844d3cfd3f0f962eb91ac89 GIT binary patch literal 41676 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⋘}=QksW*@c`5tZlWFk>o)0{pf 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 L`ga**&^mem*y&Pi literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..5521e6a564de3076d4b790a9db8eb302333a2916 GIT binary patch literal 41536 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 S_0RvON*urNH{buV+h6p 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

!XmQm{Z*H$HU~Hnp-n!GpmLW_S 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 U&j0`b0LJ+;PXGV_0MWO6orJ?YRsaA1 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Math-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ebe3d028a34a343fe4d31706cf3d2644d646cfad GIT binary patch literal 20344 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 bsAcs`lnHTDp9ZHV&mrs1L!ES5y9WRO97-I# literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1660e76a2b6ea179340472720b3cbd15acf1ce9f GIT binary patch literal 34204 zcmeIbd3;;PeJ?sQXT`n)1i%Fg0gwa;uHYsv5J{1eDOr*wTcjo1qNvr@W-VS4XLFpy zQM1}joM!J$>a0y5+mfBVN!#2c&AUl%v$RQjo49#N+B!?~oV0ai@P2=D0Fqkl^tSJx z_xU`M;5lbz&N(x``R%{o4Bq`3#ydfDo+na#09wv!!T^XxXZ1Lw!tX&eu*Q|t&kh=wMcWGC2Bwjbx?>?T=r z8g(boGQoOS5ubH9JA>bYxc@AUC)i=MIF7RfYh!oGR(-4;PiXrc@9SLiHZc-SkM z!cNZ2?A)^d7u!F_*aL4tY2(%%UA;3uTzoki-Gl4BOUD*Z&ffLQw_>bcN7-{rcb!Qn z+-qmd_YCSs4xT)8?5~19_!VQ?R~U0Va%l1NNt6Rl4?KvYdFbf92N!4G+|5{^m9axV zK73$tzZM*ALER;M1`eY@`>gT-Ji8y)t%r}Dxu^PJ^*UVt6+X`%J+ZX-9#+|1bdnqQ(_~^+Kr_VeUYW^T&_dkI)-#U5fz{!W+ zaOrF4?_RV&C&!NQYnSfca+_!LH>^eZ8OqtWp1cozu#VO2vaZgFU!bkIf)cn#{9;*W zH>;ab|Cj2Vd=lMK|9P1#c^Rh1!U(}qte4%5>SOFDvXS7Q5uc@6aSlhu-e4X14_ObF zc!nX!pI0*WOD}uo=e0|=?cj#}nDoRimzBiw5W5+DdoID)n{QPx#;=KsXqUj-pTqm` z!?)nyb2tK-M3H5bx3MviWj(6K#*_)x#e3N{{&BVyA1a?x=GmAmJHecEL>ZOm@!5<| zvG!@fF|+1cmdpEa4?RN|`24N>bl|v0d;#x^;dnnjOZcFUuK66h5p9d&63RBPJ<9*Y z2j%#TJxOIyypz=e-!uqJ`3WypFhiD;%BS@ zNBT7Jzrj1QY>$L5oyMvnJwY!vVs#~9i% zmSSz}V^l^kAXwtqLt|1mV;+0ib~!Iac8=x~{a_pvA(;mV6KC{kl=#Qkv$(?WaIG@X z5O5-aGe6kL7~2hY^b+=R_I}E$0S|8V*5mj7n?Gt2pE z_W4_%zvcNom%e-HFE4%T(l;*sk4s;_^cR=D_QS;=-ulBmUW;b%qW`lWt^)$KTO{Sw z8F&3Ls8m!P@U zky-qd2{yL0l-?IlCM#^A!lu&Gj{$sBdnY?9yiiH(J=j?hg~a|u8@ zhNTTR?4D1ilks!&iORNZ^T|qiA)crV(b>?#LgKvDXmNj~4Mnx9M5UYRyQ$@$Y@1J@ z6XzBa75ldNy(mdgot@4G=xktbeDA`-LcGHB3k&HA+ctk-VWG346cQT}6*aSn4rx={ z<||ryvZALa(fx%A-`iPH3u*K#vH!fbZ!$qO*30QX>NhM^l#V3IrxNE9=kVZ!86~2V$ zSG11Kicv^VCmmBuPpNDlnxLEIy$jT2@3icsS$NEFu&E7`9my47+X|Nh-)=pH=h1~J zjCgNi!@2Y#O@xFLixV^}i8wl0?`1{Fq!*{HS2$ka_DU=6!p$o~TYHm}a3($Zn8U7Y zm`}#j$%T$&XT?=GFT{q*{>ACeio1XTBoY#TSSb35nHtNW)HS}U#t>3cdWzQWx0`MDidVLXZQfGqbH z&NI){jq~R{9?ak3WW|#wBn9eDo_Eqe7yeav7&D<{w#}a>%muI}&tZD$wH?VcZmXZi zt$MlzxKFhU7|AU9Kf4!`c-d6FzyzL$vXTafrz&jxG0wTfhCqRxXJW(7`HCk!nb=Tq z04eQw@!rYAUcCN-*UOokO-`QMd)}|-D`)fZ6u=b3*aG>^N~mz2(=iM<(=k#wuh6lf za9*Wjv~XUdW2|sqr(?Wu-k@V+;k-%5rowp}9oq|uVujz*S?Q1`cXn3t^5j%!rMbW= zuKa(Zk1gn9GoGD5AL*DxAL*DvAL*DzAL-bNKGHFRKGHFZKGHFVKGLxbeWYWdkQkLD z&{+Uzyn7Q<1SXo#MI0*y!nb0f(wVPxf|9y`#IwM*Ym!oWaVSk}>_uAul{zckE7QZn zm9CES8V_xl2OFYE=vfPytE+npiIVJZAKLK^S5q_?#WlM}7nzzJcJST zWBlmwHE-Dq#9kcgtdt7H$Y^I};CD3z5-y?nAf|+cGl^nimWUUi+;r~TYVVjgTA zY!MVazJAwa@ zG{ogr-vx{qAs8g^b}d_jL3$LRStpAtCI~!{m`Tsl%V@SnCCF$1HHfmE^Tos{WFz&s zR)~kKf?UtwY7?qfq^~tmS0mTnbZutP$Ii-Ftp`)}so6{7`N|>Ir*gcIP811hGhoc4 z3&rzA9s~hStQ2E5SBuLl#j?6nZ%KZAV)H{vg&>7jUX&3q>p zYJJ>5z^DUthQ^;H$Ws?<<5(H;EQTDih!fHtbQmaB`az2uU!Z&wcrFhHDkZeJu231o zVUD1-0dP&sK&;i_w7Ed&SeXM@w-jJuOylHwoNzkXT6m1hl5IGVCEKaZ22|ZZZRlhN zwV{)p)P_!Oq&Dkuaucw?PUfi%oh(qBDV*F)ZRlh-wV{(e)P_!Op*Ax(xs}?` z$!*kzPWDn8I$5MPlQ`K&ZRli)+R({SBlKGAG8f4D`od^~Ye;(sK!C7({+ zo_aJrn*LI&+4@wbHS=gTmHlXLGWX%Op|(G1A8P+#`?KxOc8qkqspIQ;cmAgQWBH#H zItnKX-|UQazOwU6o&Q>#EIw5He%GyC@9cWEdr$Y@^z7;RZm;O==snf@mA;X_&-Q(@ z@5g<=h7r&U2z&*QP?*8Y3%UyTV0XUH*XPUi`O>{_-{0FSLeKwGFNewnryS-B5cRPP z+jcP-5sKi~%~jId=F4F`hVNFPN4n;i5Xu5m6t}WDzNW&nQsGlJFO=PkwKN9(c$hb= z>7jfe91(__r?NTxmih+=`jmm*NH`J>8oHsUbJ;GA!hh3*Q&Zg6yA{RIHD!IbdXpN^ zgwXw3ArCAQnz(4_)jmVxTvPwytNx%Op8viOnqS|k2UNkKXy)|*O}l`P;nVzs7*7M7 zjK|CVo@650U;+$+bp{0&0%LPvY(Wf52!2Szf3{nJ)$J0SvcVr4-E7TtmENGNDeMVBc9;>=`N0OU%Mi!sC@l;Ma^Xu(b%F0f579> ze}1h(@kyPl%Bu&5xX>|0#ZJNX2d*x%U@*2kq3i+-4#Rc(=CX4zD^zW_A{eL9)68Z~ zU8rsw9;7P!Ja!>m4goCSiw4&;*PPQU;I(9!=@)J2S!uXX&T)3?#L*-B7Z-Nz*uHtw z?1u7KsjsWhnrd!p2nBpj8#~Mo`}ANwk|IPH=L8uGLVXjWR6iXY0IYh$p&+ov!-MMp zx+@AIsPynOKpg5@J=fE#kIi#}KQEE zVvhwHQbs`4Hf>6DXs$3C8UZxiro|I`_5_3cM>u)e%aXM^(~p)L>56x6+{Afq)5hQz zqdw!V=(xutxTCqruJDML$&$tcuN7&}_cyCue-Jt1_e4xmQ5C?&fC4jn#6FEizQh*Rtn#!hg@HXL>z>Iky z$mU9EqTqfx7gV>7`}zT1Jrs;uzIP@3WL1>7p%mCf>m=k)bUr52anp3RxumT_oW zcdu#B*f{?KyY3B7?f+bpVrw?JKWO(B9IARq=(aAe;O`lC`4Y_mclFWWU{@17)nm(F zQN9eA+2Kv>X6xBjwxK);2ExGKlqCR*>4GgWotZY>+|O*PYTLzZHg&gQ7phI&+T1jE z-SpJ@iNU_MY*Tl0cQ!MXbm$Fv9!#eIz+S-42nCyYU+*9dKbuauc_<*UaDdfuR%eEu zu^JOVExr)Q)*vVE@{Ck;(ACY_pS{p#1A^75|*5~(KDd)uvEwKA5Un)y|n1PLWc3FBgr&Tv;GB{4b_Ci*D#qk)pcEuo-% zzy!}_`R+}(yIbz{r&~L12Rn6P^6s1)z})ZPygAS^QgAqR$GZLo@5WipyX%&%M}2z9 z(`tBas@}4+$!j*X`E_n|g##gvey^b_k&xH4rTd(raq;z~>!OMBR+rXU>@?@!?$=#* zO*fNoI^^UIEvVV<&=s$+=Y-jz%#H$1U*gMQ=82ektH?i6}-WRqX$;k*_!ATV-S z$;YHb%imQb&^E_lRRPtX9hs=gfvr1Yr6inbdy67 zt{pMAJGR3mo)M;e-!C38xB#Ele1|@`^;cUzaKxt=^v)@s;ZNh8n^{k}sDm%fCMB7n zPGN-kDioRg z>|p;uNrxl^!b`qoA$wmlZ{fKjQ2KkRa6``J3N~bXj>b#_KgG{9WEvg5Od*yvT{)jF zV%MnS!cbh|^MR(uptf#=2f`^A&o;KWT6xCR(wOD0R69Sz^%j?CcG+-ttp>o^8@(cuz zK__cE0U-n^eT)N9#*(~MD0aKI8Cp&&B>F=S3EQ|$JoHfVxtRAYZ`Iwpy;*!v1Lai>Ky%Wr2-vxlHhzBtW5_gnyhxL35u8iA}SuhUGe$Vd8Pon~H8MZ6}>{NA-R zKhB)&)4YfKpnf-$VFv-JcF`Di1CV^{z$BqF;6=D2rIDKxGjzt(Gq*GwKA+Ka%NZ^9 zlawL2>WsymKtNzB&CfRcCm49y@RLqOAV^m?5u5@dKr#zAsf(+ZJ_d6Dv3A_!Dk(4p z2B8<%2#Cho_X9;$mG%8T630-2A5xVE6b1UdvVJ|}0MVo&b)EogDL1-EdF6x<{1otk z9pTJjV*wseRy4}Xh3=t11RQIZu*dvSu2ny#+W#%;(-8oCSdGMdn&Q25r|LuR1j{e~ zBY#f(1&gvF_PV;=Lktjt2qF$955bRzIavoJ;KGs(Qf*|VHY#g-Q5yiMLcHC!+6V|y zj#6{L4dje5D!Xb=Rk##u(B_JT#<<(bqCBcean`JWlI!9s*DuA>IFCTf(9@7eQYM8U z-$<^30f5B8khnQMUuv>*H9h$H2M5zCZ%9Vw&jizuQYo(kc9L)h1JQ;+(2Y|~{6%JL z|G|yk9_`-g+i#z~SL^ZK@w(pD!l_1XW+JnRgOO?TruD%c$< zLr=)C2g_~`ga>RV-VAzGYPLm;aZDgep=1ft5fnwe8JemaGJdW?8o*^ONJ*%*@R1e} zgBc>ge{0WJTL}#yz*#a8iw68|7sOYFXAFP~T31er0?Sy4grmH#S%3p1i+l{)Kwqgp zt=|>)i-;Cp>h;)Eqo9kO4x16LKIOF;f!(4}bo;|ea0j)=&3RO>ey92!-SoPWcEcU^ z`^;be+Cg+s#J^u)>|^Y{Cx-^|(7Nk%(1co=_>+WFyXC+!$LhjmWK#$C-oM+W`KX;a{-g9@1AaK3G;&+yLt&`ps#-c%!b+D zJ=xn6QXuMTh>}OGj)^|WbQOQc8L~W74gQD~2x=OMJ|zsFgGGD4;}*cPc1u*=Lde$k z0&mfnqDk{eP8V#Xc)9ojP3yCvDT=nM_6ALnq-)Qla_!k5W+T2jEnunyYRitbWHO3Y z&8J?{ExQz$U*jBqd_3A3($}RN&UlPFwwye8Y@hSY%g-F$8HNe0YN}^uejwM7?ds4~ zm5=bIjEJ`-;4yP$GrDHqa`VkgV_Mrw?>sx?QI(q%!``oy#z)tgn1)R{*Nrj&3OUw=x*92w`zB%M(C<+`toV&r*%2!mt;lsI)ldq?zr)Q{V zF!$1I3B!-(GeJEs4Mt1Hma>vkT*52g-XcwR;Fm!k*lg_r5hBG!GS0J17 z0jCnHBu&8XlW0aLMv|QLAjt&)YRe=A=^qQLrVn@{fr@|om!Jmd(c4NR&+nVcCBnK* z_f8f^Qida0YO#5F%nb7VLFlZSUyC>5pV%-BK35t!`|SFRTNy}sGR3j$cZOSreb5fX z3VnBgEB>VH_Cf5zwik_SBtioGPzq6qQwV(`X)i&?G9$wvy}1g)lhpyR9CMP)mZ zz|CN_s-~zUVB~Wp-CIwyT9G7Lmki5}SMM1Eh;JrX&KpcV^;D>BBLbVx?_K2G+#HisHAU6r7N($-7 z^liOCJ@I2jQG`PoiyNwDYe^4J8%FB7EydQj$KH_Kn$to~M=WN#M-uL!s)q*;-?Me5 z{oj3@$M@)5^IvzwVH@hqE^M7Eq?+2({DWL`ZS9$CEpu<=aJd_vd?~M%e*@n8B+Ikw z%8q0Jf|XROI?2P@gY^!mxaP?JNsueAlzHl93uTvJ%?-$#%!>|{)UCR!4Kz*ah@^2T zel1`~-4Y^5fhqD`XIq>b2N(SOT=TS%kU|B7-fiF4@nz7hP;6f?Lm7uR>2o~zZ~Ms< zMd>&ZH*BVW7LU5^zpQ>M=f_l9a^x>q0vv3TJ$AtXVy{aQLI}{aMhGD(HZ%tXS-nDW zyQ)=WwbiNuM`$CTg(rX;)-*YQGeT&S!bwe!TWJNWWLN!ls-@BSdwWKPdM0}(JM)=z zn8X8o;bgQ)y&J$GGG0Tr<7A3u;Bc_81vmv{QF;dk`%x|(ZO!V~p`}j8N2dHPsBTIj z+WO;LN;_`X6<#dycq|up2i?(P$*#}zGzde@#E0#mVbc>A`rZRPRGH7&A)>*$n~T>y zof&-XE80K}o{e+uEke^X#gUGLyRUjo$(%x6;yOWjKAD7+ZV4O`{ z(SlI?>I{_JZHmy8B~Wb*{B>GeRhzGB1fs1Gqy>CSGps*}oYjDR?Saxilt6z-MOa#S z9mXSe)t(|O$lD^Fxk5HsbI11vq}R>D(Ykg>z@6Zj6BLsHTfOO9}8 z8`;ouTv_&q<$yJ=Y&hhGUnB+dj}VE1GN3*1{X>{%NxBdcLafoDY5XxXQ78xTnk^`{ z(O|UzARy}(*FNC|s-$+k@MJ^7G{GU74_pq17jkA@29UR2%d>SESiW*ClO3=bW49_X z{s?UM80#t{HS@W{nnv5+5aoqam76!L(zb7|{n(niFU zWHGlUn>D_LZ*kZiiRbqx{VuxN4A%#rc8=PFZo=2&`iZm26UL({8Uct>Ul{+Y_#%?> zN7>P`BLPEps3Rx;+fY8AOG$@T z&7zS6X=yPvZ@Cd9Ck2$qoMpURD}2a%gURh(E))Gs#5e6Ybi98%0w}sWmqk#4b0f6L zf9&drVpnUVFhF zM{jTBhSJG39o{M(j9J%C0z!tV7)z9aubZ&=Yl5hzq}VJ`%h|+usjs6wmr1t78iIaP zM<#ubU1}F~MXn|zh*4QUY2koGI^~m5mkHh{U4VujkgN-u3CWZ`Vslc_c=Y^Jr*^-k z*D;YF3VV3;^M94?dsRZW2U2GEN5jKsH;uU$40Cp0lWNx+8X^Ygww%kKFdT_qyW_(7 zFWx%CZH@VxhL4XppZe+Ep{-mrIz{!@ubG{SX*N|eCj$omjR-dM+po9J_z~=}rEfkJ zL3*=b$R8JvLFaB|{cPq!8wt{y%@?E?6<5VRpbn`WH6vqfF=-w(6T{YBEQN;>8iie~ zxUruUD~p|X@nlfix;0NeY>Y^@lp|}`1M{K;Q1P_-CN*MLzT;Q=OIp~WdcDH#FA=e1qDDj zVktE!T-Cxex7tG5T;Yx!WBon3Qb(z!sWA$tWTa%0bIr025a?)zvS~SjrP&X&Aq`&u zd_;s2N?-4|GDvX^l->LVY-X%&h(#lKVBjp}M_BV#w~SRErUd9sljb9Pfe1M(=Lu8V znDKuu$eZUkyv+OFSD14%vo|!}<5yRvM#QV1`{VgZ7pFO?2Du)2psjeCf+id|%ES)w zIQaXCvbQk=ZK4lqT+jvqS=Zs3L73!zSwx3xMgeRE#uuP!$T3~jzys~M)ItZ;|fDIrKi%VB2T3yrdnz-fdTd{4{6W(O^3!o zf|L#NcmFGZXrIDAE{$2;&o!q_U$^DDXv}!vHFX2`H4nT*;ksW>)O}InK431HvrWyg zE-**@19TN_AmjEz9X|blPl4?#d(w>vq~iu2C$U>2-YB3*=HjA;F;fsig@>e;4Rdv! zoOYQI<0JfzhJ9{LVFli<10?+Faaz-UEyxH~)oKnAjPLAOfVIJ*scc zm0Hv34(Q79{D4=QG!Y1Ci%!W{kz_j9i^xltphOQ+CVdjGQ)8cc;?BLWiZ!g=fn&>? znH@g1Z|PWfTx2px^HHL^jzYT=+8uX2{t>?aiK3}-Z^{QU^|U7L`^9}`e;?P2U5W>cCDRkYrt2StA`O$vum6;Kb#B&PaF^+)x&6YsL{ zQNIsAm`|x@JpW+*?A+^Lf37xvgq!4b|1HMnXFX5)JGYKId3JNkiGpeyf?|VUu*>Vt%z{)P04&P4)(YvE<)w#0JuDr zlTBB4K^Fia?WG#TgBC7yw0Bd0m|JKQ_Ibg_L4rgMjxq}?dQcnBz>c3WhW6W%6(=~Hoo#OBhMuHkg29xfu;l=0B{}LN5JNr75 z;gAE_a4WfOE@JntIS!-qwR^&U#=fU5a+T6w+9(8oYEtFT6%iN(v zyoL}qp6x2`*P4Z2LEf+1tDb3vHQ^tQVwxy`*vfYn!;~ zMFOMGaPFFc{zH@AmJ67Y)OEw>t^VdqVMPgiv6}QE^$xIErFTTSbjQZ(M>ca*p>6n| zKHVpltIw?vqb0wI$CcPf*;a};DQ~0B1zZ+r2%X6fP?py;!$J^9p6u%$>g-izRz`i~ z{ubU#M7EZlSw>b-z#U=)FCTn)UJtu%KhjK6iEAUq_~*tOY#!6N`y@xj+VKh{=&B}M z@DOpm&eUqdRSl=@`Ts}w#ircDYeq;m!#Hwye}Fhq0M^5T6^9K0SEZ&b<jWL1a7;9g^TT(+#->4zzdCJ9nys?eI!YyWd`OG=AN9iH4Y@>spGsL8g%{P zKk}%y-s&?C{9(+)pYy$IYNylg2^HE)?KA!yG`^eoVvs-bdo88e;=i0aHdOii+(drQ zzW!OHYBUWW(=tw49FFmk4)!X{VFZ!W?TCzXg;9vQPOA;jzu@!a6!WWD2N=Da(W|N? zmz9&7>@Q`3>F`+)rq`9M^eXl8Y+ls$|14qh+uxIV{8Q0echF$=}7+-!nbmFf=Bc5ZQFS}=8$Kda3N$F+f#O05(EKQ1LSxAHg zWq9;$hohO1{B|kd2^snlq;(?MU+5ekY~Gw91=Gu*uIWuOEAtS5QSTZPqW&> z!=$5IsKRg99Bee^6#w*;W;jfz9#M^)De>l+%*z)G&6;!l81h7i6`#%4_)16VBfpxKIG__3i&ckUX!e>Ssmn?qSZhOWl|hMTHKYZBc< zXYW|SuQvg|IuU8Tt?Z#do*(j~GXfl2)nYYBKus*x{iMoLrw_{%1uMjK zMJq~EsI`i&Br?S7&ysaay{-Pt2xZBq>b2+%Ww{`$k>HNpF6%)|l_6x92z@=-)?^Fv z=BN2InFtw(DgvW)Pm_b1I5()frf9>2AVnJt3rHyqe#;}010qfcOGoA1hqpO;-nAuQRcWSubS{1HCZF2w*W3<|f8;jJ zeXxIBFlrbzRova$Jl7ZEjUxP#jVDg)u7abkq}zrAHh>KdCjhw_R6{m|sP_#~)9+JsRKw^sF^>v-hlNGFEZFxl*vIu`Kg z{h+H3w(|m%s1>>Ev+M~JDSI&OtC3+@AvJMXL750Lff3o*d+8pj317?)wnHjIAQ9uX z5;e%DL9q!+(ONBRLI|IRmo3%o3sNDuxo-TFALJ3zR}dmCsHFil;#97`(XNWct=t*Wik*u8&J(I5 z`nH%uJ#nYhgf35~h6KgKk@nM7F7Yzt(kR5a#n|yM; zAJn-*(H?khl*^R)TFI(94@-pM&W#g86GJ+A6G2LLXnhuBfkx1KDBEhaLn{YU7YTv9LS@3H1h?*4_?Ovn$f@T`bEBDON<1ji@&Fu@>Jt>F7WoZ8K{DyXzbcSA@@FV22^qk3Rlf*P^+Dq^I z{O2&Ga$Jbnh{G6HiR~&o19pt5n1pMju2+UB^H8eJ(q@;*7uFiCl?qARvO-S3M`0bg zrl`lsN=iv)BdXxKDT}>IGAC7thRa*~EQF9(l9p=NGA{VLs?UdPE}i>ev<8)*Kcksg zAtQM8Q66Y8U5XlnPXTQDxBp^Qh);Z6VBw4rYL1iL%RQzNNa&)9{sa5Ta|g~qrNOkW z{`S|_*ta5YdmK5`O$`3!DBN{O5yfZ$17re#Cs1sd1}2oP*<`jROo*td_j&HCpIYJ* z7SR!P;Z~c^XJ%VkvZl{xyLH|&^pMT1QA(_K>C4uUOgQDEa5Ts{Xh1&<^rMmb0o@G5 zhH@ww3i^RLT@#~DW{0F-flx_uP)m{#e@6+{)lgp=V(Meoiv!xiEwv6M)tLBF+K}F& zOE-~WWpzavL7FbdK0;CcDd0hz^re4hR&vtDHN*I}yoD@@e{X=Ykmf#lQ|w)~LD zEdRrcoM7)PyB!$R zAP64%u}11`5Jo}^GGo99G;xwEuw`2cZ$wGa(P^oASr!@17U!qgG>&27D|69LhRRc^)HxI>sb>9W_@AiXp2sW_%Tj7xS(#Aez`C%Xu z6%j({s;v=Fv_U68@G4%us+eM0Fwx0%(+CO!W2t4jNpQ2>P_C?WBFl_VT-gQ@1%l#g z!d97@fDNra1_8j!npmk=xlBt_G~#g@DtuLOD-|mT*pb{>^;5wm2bhO~nXpWwfhLX2 z4!(Y3089J2I;GpHGcP@Hwy_-_u70s4Hx}}`0;7q7Js$(-UGZRf&AVTsxBdK|&$hI; z+^{{7i;*1301v+kJS?*Iau%*0#QMP3;5xTdTA8yTnJKU+KioM85i!w+u zO8p(na%f=@yb&ZrNRg+Zq%z+S5o1$dUQ-|$bj{n+myf0c4#n5(3)tt@J2^-g>)+;X ze&%OC^kXHyrt2M9T6q!=cp~j>&Eu19vkNTLuFNA!o1(dW>1EVH&U5`C zP&wANAp1O>9m-h=JQ+ZvZvC{>RxMt^GjkLZ94yfc6AkhGV>1g~{ju(o8;0#rj@9|P z55BXg#y*tpEo7V9x*9y1-qts`?!H?GZ)r8|IZGPy8lRjI|IqsJ>~A6sSWQIh(2@SO z{9FD*tT#_0lMXo=DXw0&v zgudIA9g1dT?!D0483>Q6#Qh)>8Gjk#JVWe!*^i7&b(c@SthBaY5Q1XP? z)S{1%S)%o$AFUaMANx39sxaSjuL$$+AUlRuN#0Q2ig<}m!G3)t4h$;6Nss*>;YR^8 z#?n$9tPsKw;8YZIH#5!X95W0VJ&dWFckSFVH$6E%hKMOLKmth{EjH^1u7G=48m7!D z%}HeigdimZYAo$bvI?*fTDK@^B$o}#ymA=Bu)@|XOa*TQcBQ{LKj7?Nhr}&i7dFKn z8E-82-!@Z%4BvgwoZIZukM8jIoS90srJHqE&}e`3rbx6a8_pL7+vc0Yx^u|bb%WNx z3m-}7F$4@-lSq+P?6z!qA)k&o)pi%q!tCnyN7hdnqS-stnp=kq)~0mQEJX7I5L|r& z)vq@vZBbv$>5RdYk&BBs^j5|%fj9NB9c6D%J1t^{0@v0ArdoGfg~6Pp_9~qQ-qo}b zssK9Gyu?-oMKqo)4R;JBEx%}8$*=$h45Gx48Xf^sHSAd{KE5)sZ)R3nU23sYmFBkY zazAl9k9>g9C@sujuc>#rwXf;A-U zo5;zH!Bclv*%kCbTkTB8$$|w@Hi4LAil0m-kb{=!Ln?cHaS{NwT6@K&46;IkL{^YO zFL!0gwQE$hvE;{Efkb%(nUSeX^AtewI)u)e}x6iQAaZ77Ugk0q7z26rlgXUX_dsY&YAWJ zr^^@~)a}Z9x6Yd)0?(C$@7k${wb6B#6N%US(8op`DK9uFn5fH8-^K5^#{m)nrZDzZ zz~ld=IQYQTI9w0QUmgbse^R=@^JigS`!|eJW&|7SZEp@??e$6~P>9kB*luK86T7FB zBP(=sjdF_HlpUGj>~MAn%#oxW@C=LA*D@-ahO3#>waSQbS!f#i^L59MMU{1jH_pIK zP~%g;LtDPP5v2ISC0e+nAl2dfZHTEW2^KZGxSA7x0+VHuW*CQ3s8gYZWXR>P`1pS0a_XU|fzfc=w zq{-3Y3^WbDIKKxdz~>Xlebb>cI3Wt(3{~j8X9@^ms>Rc>W1HFv9`>X4O^sr zHO~JX@XaFM6}z+euso7=cfqbg1~rn~;ctLuO<0Wa*A_Mbqylm9&AD8zKiAjRHk@rG z_d(54w5%Nqw`;KuDWJw+JCaQlu#`bqK1GqvJT4sSRFB1jH=AqEf79=ESv;5T z$GBRtix75h0l?uiZH=yRF9tDsxZ)L=pn=g@K4oi}@6~lsMpAv@3g!nXqzCV)wOZGjS?o@-;tY@z8flhWI9PLBUoYCszrQ}K?9_Uu zvhBP290PqOe86xFxLXGE&GDq3(junMaNC^v?5S|ao~_p2I=Y%%e?y_s$$c=m`*ABb zBiLO_dI}t|kS836#|Y*>!ta`)7Pr45thFP99^2{Y=~m+9LD;-!#TK@XEnN)443*&) z%VxyIDb;|e`9lC|59}Re2gb=!fO=F=695IvbyjK@${|Q{cw~|-(TLBDwBL1n z9c|!38|Q$9lLwU4(VFH(%S7wWS{d!^Llr4xSiw#}0&gGVlQGPS;WWH{IGROA8|kGz zL-5|3L(s*Xo@}#SH4$o8Y*2>#y0Mh>bSUc4oVwEAU(-%|do6qK@GG0VP6a#Ih)j!I z51Sb(wY>69peJYj@S$A78kS!6NZFZBxS+7Ztd)|DI42@il4U}^?Lmay$||$;`G{3T z_yKnaEa-ZEoTaSEYPS38>hhWzcu7`oByNbPaa*P_=J#OXKrinm6r*I862KyT@T)+i z-JHnfFoA5$706l|K7U6n#La=Fi5V;o1MrHSQV&qgj*!uhC@7dDaS~GW$qDI?dTgVj zqbvBw@0Eb_nt$|3n^U+)>~DB|-G>529~=enB4^oO1700$8e{Rxe3gTDUMW*SgkAjR6JfNq3eD8Bv#-eb>dYDZNuyGdVTnt<_GXZ|PVh`zKlhC*IhDM0g<_6V_=fTKpPiOk+?hs+rV~D0Jjc;yt|w6*Au7dt2_4xIe%) zm2DkyA2`JdJP_@)lq=u`?TH_wsEjNG*Cdm+R=7~6{bvSP|8RQ;tGXVY}rPpVHBxg&f{If;Q@a zO92{Wfd+o{=T)U|)}eZC0oikxJ=E+>H-7tjCbsbbpY=7|xtP-arFw>Q~rZkS1! z^JvHr)$el=h_xD643r7kL}1Yx*BWAC=nUdfAa0G_L1(v>TUl0ISW1jfN-BE7V47Hy4KUprhKRi>u|cSaqZ(44q< z4+#UXO^VrrGYHZF*!M zX3&R+(T7IFiLu~*W&Epw;cLc;+hm+rt`3GyX8E8A2x|hx)tUc5q!jOkI!q;|6nmE8h%NN6jU9UDWA2hQhqMJ&8XzN|E9Pz|EqDI>v71P{ z#scCmh~K9jTokC~;LWtU3h?O=ZOawRSG6`l>8aEAJd$-pKKd;Nfy;=n8VzH-!P3=}ag>V>*8|HN&teXboKQ(MCpbsFkYFqPP-A4Q|z)_cG_j}VrwqDUCu7azPf#6$-gjd3`Gv3zTWDG zl0%A1?Txo>H&gvBZBI2NTACY^Y4OfR?hX{jJ^0@l>+N=XA`Kqu(?;-x|Asz=5tkUZ z`hkMu3oJ_p%Z>!Tt!aBhnekCt7f85DD`ksj5&iR8398R==xi*%hUI)&E=1 zwF{AMRj`H{>GW6)G5y@tMW9AipWFaC5!h6A$d|@Wt&{?Nbs6F641X3p?yW4z;7)MJ zd>q^eV4i{%b!28Hx!xiVO5zUpt^-Gh!c^Z!vZi5?W?7vHMKrq&YC&No=|#~Ga8Vi% z;xP2M*Eo4AcJhWMsA%RZ(0g$|_Oc=pkoo>$tSM|}`r|Q$cgsxAy5>SDAegGPiL8{I z&tGn3{a}OZV#AJ(EIFxYwV!y0C30y6BQjq^^;gwjt@>( z1MLnc*3w5j@Ls(?^u*(Qd^|$yUdsOwAdV&1@+)7DkSqJI8OM;EUdo zxBOiAewz-Nv;|Khke=2g6)-(QV@&!n43O5o2@B`tr;xC<@bXD`k@-p z3?R2iw{>Rx)t{j$D$&B)zde(sy@Bd<^Lfxs0`ua&jBYGPs6>n?Pp+nb6Xl3(t*=&W zZp~uL8tLfOKd*kdjs!f&1J$2bpIN0LtW^j6X|4AV-kbISA2O|1!H(1}VZ{`rm#R+A zI?Y2mL#`^_;FEkq)PY>iI)whO>Nnzwxcf~1#GR<6&hD$jS@$`sZ~3eloVm|hvYeDX zG8%2V_QuzX;hB5ww${c~+6Oe1Z`eGJ_zsK5jDygk*t>EHeJ&crV``fLS|Th0wrd$3 z)~*0RpjxWQs*{v-5m?bQD2oz}d5CYeD6(y#&enC^xdDe~F@{Z!Ls1`g zmaKCoP&~H{DR#G(6g&pUq&rZ`^*e-TQ>qV+#}4eM9-Qe2xD9tG5cH+by8rZ3HK2d} z@df+~8+5hCv~- z5`14Px&@Y!_F&w`aAPa1U z603)DZB$&|yKkI|+uHn9WKbC1$+3xah7@kU$5H*ZtE*_6u@6FK00*%T?nR7Ue|&v} zcv8*0t$Trt)nzppEfISCS9(ut(+=>EkttEMrp!ps2${zK$e%^hjWO)a4q4myE<5sw z>f`nNIXp&K2yPNb5Qe{J#F@q}Qe1Nvd^o^C2!K&Ogg)v4=Qo^PsyO9oO4_(Pa@|Dg zBOO@pl&g)rtzD%5v}Jfx#0{39dEjrg>HeX_&bh`dE$*NGRN}PP{QI9OjkiYUb|$7N zpA*?>O#BQoV>`y5b<_B*4Y_GNG|kBKtFbS@1&gsHrvp1nl0{q@ zHTD87rD%CLJr^vD0GCYUvN7z@s>Nd3^Z)kzb6QM3R2V7BIHsK5?ff&0_6`rT>9PyR z%&?O`C}d>;Bdie0yAZeH?NV1Hq(|E5L7j?=$V63a!_?fFx1+-kqLOUnq&seqPv5KX8FjyTY~F^-(+P$KnkP zt>}6B8owajHN0u4*s6Z+mPu9v6*2Y7g#+y_5%-8{ZbN0QAO`SM-@2Mk)4xdT1 zEwv|lySs-wd%JtO6VnGyA31b9v194Tf#XXD3W-g}mx}f)8~5}l<_<3&Ppn^B+<)L0 zo;HU^zsNVU&n@meFn`;Q#p9=U95{94AY&`v(>{6PC~#&*entBkc|3)&A3%S5VRsNj zM&u}7?D1>9h<)b7@iQ|gP8~Xs=q+|9MiN)NxYK&wi}!ZTxkJMY;XIjGULh=Z+c*FJ6YgYu{JE8}A08P;V0WA|fK81L)0N_`e?| zb@WQG>(SR^61`p=$V6avVDw=;_4H*=*nx2##GCHMlTOJeSuKvDB@yXy`EGjaS)3EO zox(ZwjF5T<2zWD&Tfr2l?b^O=zU&D!FV{vi>f371E`M(Vy}ApZBkU;t@56t3>ndy( zZukiA(<%&gy@SUfXgKYZrQ$&s$E(@Uq0 zoIG>7c>2gu>UP)G8Nlp61?U%h;EUrhyMlXN#dS#z%b(>}gWF!~=Vd6Q^alk&4-HZn zx&yNTWgOV&(*^zAgYVGr!B-q$L3q63&O=Zr3O{@tF`OpI+5}5sH;z_B-m)wQ=FyIv zi#+65ClIPj%Di4=*Y_jS9^a7x|Hd$oa2dyGBKF0v=t6YK(SKq6JlID7m^clY{kdF<^Qv>iINc-MiY z6UX-17MISRk!P~5ue;ZF=E%|gYfJiTH3PNdVC^_mJFc%CCu_$kZFce4u|;j?;R9zD z_05aN_U&I3^GC$CBifE5hmI{8H=YD0oj9&+JA6dhcKQh2wqa&wx^~=9JI>G?LK|CN d#>~{Tw6Bl-w{KAKm;bGo0zT|pPu}<5{|!95d1n9s literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dbeb7b92ab57a2687b8bcd80350520205127b6bc GIT binary patch literal 33964 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..8f144a8bb312fa160afff853133665554eee9065 GIT binary patch literal 19196 zcmZsCb95(7u=X#uZQHhOYh&Bl*xA^&v$1VsW81dvoA-YA&#&h^(^FMXwPsFt^_dwr z1#xiz5a1_Ce*h5v%l}mVcmDq+adB0-AKuQ74fj8oTq$)as4y@C06-Hzvc?Y##CHsR zjcpAb000n^A3f6#-XvVF{p+qdBg{k3xHw1d!E7rUevyNd>5nh8;E&%= z`v4IMQ6FROYsLm91_l75C4s~4+Yfeqtb=rYfEXsdU5yrO;dj}mx$&);Cxq%qUoR*! z7{DqMjv4TOKAz9H(L@nL$GL0YCj3f)=gP_GQ1Z+r@tRO!K1PCZABV#9qf%`rBm?@;B zvz(!#fuj3&uGVf3m8D(|cqRrBCDf7c z=kAE$Fh8UXN(kyEUOOP^F-SnJV$wAqvJ{r)G@lvh0c1220tS3zFw<)#9B8 z&r^KI8{b{WSrz%^d(ILcAuBobJ_Vd-H20=|+o(*HR5Gi}Q@rMwG`%UfRnU$2Cez5w zZhv$BG3jR>{QeM}3CP|pF+?mC9O-e=2l9f`#r$}?5-hop`{1b4{awI835sp;MVo;- zX|=*JqiiSdVFT;&EjVfGY0*G`4t!u<#-z6CQ%|9GF-+Z-5^->JYc0Q^jotGC#-_Dg zSZ#$)(PPw}*CzZOb|oMAqJ1R;_MOkWMA`n#7%HE}V7}rpR|-E}%b}$*Sql8D7^J<@ z;(gLmV|%oi7s}=-Mc!qO-mqnxva;YghUcW9MzO1lyt(3~9J&E+?@j*+C|^~}|KIy! zU|{BNfCVlNj`#w6z!dmO3(Mi(h!g}IM>c3MX)umBi8!q|q&QORKN~lil^&cPlpg8< zeGhxII&q(d!N_2yH{7W#Br2pV^z`}t{T<+m=I?odWrT&i>xr4Rn%0&^L2{}!)+sEc zDI_d(^r@d$Jn~KO>G$&8_x=8T{jvS2|DLprmPrxpIm|^Q4RZHL

*oboKiV#1t zYyY+>CvOv~VQ@!l!|bbl+G4zG)l|uXh+#u@ z;v|EXI;V6ZEGj?J{LJ21xzGAq(VC$ykakRV-z6#BYGW-zGpP*fdieWtfGl611% z=+;iI-*>B$PP}K5ZHW=06SCBcP`IRdnj-&i-FAqjZTj!JaP|=Fu)hOMu40?@ zbOhTaxE1J+I|(!|A~ZA0s(cGvHMccpxN>Gm;N6K`=yzy_5OSuka= z=w;&*YVNS8WfsUh3`|W|l|hgXjh}w~xbSM*CRzb@Yiz9Ow;X=6QykdRmQ4xF(y@BL zWcq8~%MCl%4lcenVByvsPn=n=@`zK}#}!L!lW<=?8FKDBYciS5an~3uzDPpR{*_xo z?&CXBa^ApM=tEanjIFH`9;G5FY!TifL4Mn1adb<)6i4QQFCK`^(o7TZj+A23KP1Tx zJQ}`Of3%NMO#I|OiVKyG^3`{}9}$G2WWY!G8a}~WTaUbn9|dBq5&X%gYOGb^)$ekH z;qf;p{OVR{0dl-MF}PWb*S<2wfTdXxW02ouj3MBr7y~$h{&G2}CpX|##iH4gB+}Nq zrWXPSI$>W0rL3FOVd26n<+4luqZ?7ATi;kO%_2KcAIu&JCzSLsKYuxwMtCBal?{(#yx^&d3*$|(zE38agGdpm>lAi?l2ghIgTf7DUGbe{>y<<<=_fV2 z5BTQSc_bD~W&ufJf_twJyNCKdyMJ*oEjKydTI$9eUa{A*v=_{Tnuy;VeOSVM$ju3%Tva%@Y& z8T@n)sHhg(T3IDyTlrB5QGGf6h>L)e>0`&5zH)rqI~~f`zIJ_G-;0Dtvm6h-6MJWr zC-Kf6cIcBGK5!`ss~{HBqr-}fr)7ZENdf9HX#Dg|(1d1obG_79KA9^t1V*LiFF?kW zwnEDd3n4$|wFQS(ZjCI+0SEmH>A94FAtR-*jBX8n+ z#ZZ}ye0Ws*b6GeE){2Gd=e{!xWYa;d@NLy&Q=WDFo4qqT8A|Gg9wAb^k3U?W$eVc6 zd8@)*aYuR2oA{d*C3?mv7WmcouNeK2>U7Dj^64km@ti&ZyX^t~KHB02nz|1(`M;3E z5rPf(Kt1wOQw^Xd{htlPU1{≷zAN|6ZY0)a?&1a*v=~=vtLd)zB{Z&lHc^6yLgN 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 B(i;E( literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5fa767bddd69dde2a3a8a009667c5555161058ef GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..1b38b98a180c93c0dee50f491c520265029a98e9 GIT binary patch literal 30212 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 MoTMv$@AL8h2W0f$ng9R* literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e4712f847754250be2596ca801da591b0f558416 GIT binary patch literal 29960 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 UGdg|EzW)CvCg_U)@AJ|B52O^j!~g&Q literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..33be368048f7e28c8b87fe4631339a801a09b871 GIT binary patch literal 16744 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..da4d11308aeecb950b6a4f669ef1d4b05746f887 GIT binary patch literal 24864 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1b43deb45a854d69d134865608f7ddf128e654c3 GIT binary patch literal 12276 zcmVf{+HUcCAfd~sm00bZfk0A$v1`L4;8~0X4 zBXW-e5W|-cLCNWy{eL{5W9&xYmr2U@yqBd;)|udhv*wvF(lsem-Zjr8={J+>BNU5MbrO(o&UD?p-Yk_ z`+JD#ImG^n*W?D!OGALwv;fc{wp0OCsb_$;*(H&8fPg3}h**eVVWCt>N{F4fuws$< zzkgS{?PK*(`|s`j?PK+^kEnULR?cLzjK}c%N0+e{)*WRl0s#-a6$Zc5Cmr1P;9C z5>9^l7l4QOnqC8gH$XZqusSMyUu%}N^KHUD?EE@$*!Hy@IIut#%ac&I`!n}UV^$mb z*HX*oi(C$Jr-2t@yHYjVJIE<$T%`zyNXI^_Y;_Bg*4=^P1EBZ<_zB=AQ1bW*DuJ&b z#SbZ!4k3V4BKb+u2TKkqm+nKV+;ws%cP`5mI*Y*3;JOdyA{9^X#I{^66&%p`+;I|J>9|B1JlFd*+-dU~y@b2?1 z^DlNO*j)7W0Pw$l;JdG$lXDIkn}Daf>;F{x|4g|2IfZux;C(eP0LU)^?#eTyp?pUP z6kPDcIrc*ESOBQVknNOrMcAi){BNle)!ymfxOUz++h490*oSk#z;jw; z>CHdr-M>M2{FE5&(tIzc8ZRY?)&G+4D6=CwblwB+0Bt@&5SAD~P>fG`7727L_O_tW zr>PkfE{+yEpOZK5#;fA&R`Rgy#Ozu*g2YSv1+@+J8101vv)atR|xs~8GB4`xdoxwOjVKO;&-1syq(a#u; zZZKXP!EJp~B{e4bXYiI*Ybtqdr?TbhPEM9Hbheu&%qbM$+EIW9BJWI4G7A+R2cyvh zXsnR*6wJUFej5-W0n=0-{iBkqvIQ$ST`TjTI|-B67B1p#Z|Eh+Fubf#$cJtKp;ojQ zD~S^%E2*$+$!jR?!faCm&aBSK&x=}Cp;}=P*j1~=3~A3Ipm9=LL2-Us*MJJ62NUr`7B-=*_dqsQgL1$=;u5YQ3;v8@=4ghTcK$`%Rb>Txj zLp?{qiZx@;XRfd?rrXp$Gkwr=dfUJbq?Np2S$$xASoz%gMy?sG9dyQ!WWnqgY(6{lr}m%?f`26lN@ap-4uv6lN_T7i5e>fZ=)>>lW`7YHA)rW>A8ufe=~3r-24 zX69A|dz$Ul53k=zZ8qM3SBQM018eT(bPFrr&8?~zbYo%zQ*W{DEq9WJ+_!%4?gX}< zF0nNSR)+QgbAn0xJLWzzg_=SnZ6oLg%AURl4m7TyWua!(HVx|S0jaz8!LCUa zi}i3=tQsDO4nvDFSpU)7*A+g?#|{}HsJn2u!do2B;VO0U5qa7&)d{-b19GNkv<)0h zav$p&gvlAkck_71^n^~hVYV>!T8xD3YRRX}O0ASU?CZPtvY5`z%0I+&sozMVa zjR3GF046odW(!TsS{{_yl50^bF6C`ai3C`K+QUT!SqCKW&MSa-0amDc-(uFYmcV;M z0Ph0;MfO#*{wm`etO2k7ACdQ`u|_KBeC|FLdvR226k|P6 z(?ObKoW;tc+t{2r@*opiUY+3IK=0@7{?AOT!H34WH(uCq4yPlVr-O=8kpLC0!lwRO zny_Kp?n^GpyiMuVNHR%@=}Crb44a#dI4htsd$PF3L0Cy3K%|=biV24Lb2UMNZp-Cn zULt*g;l9BBCiMcLi2jtLul&)@ng;O8Hel##X6l3$?=pDiKC3OZZa<`A>Wk>4JS!(J zylTIzxzxBRFrl0o>2f4RsaM7@!lTFLz|B78DtPfoG^%k1FBy+xR>PExt#n@Hkc)>s)|?Z5s0af%t>( zgoOJO+Mym|cp~j>Cftf#7X`2!mkf%Srv}je zs{oezY35uM!mT23GFtXLd-p7t%A_-qxA-8Ks`<|z@5Uukkx;~$S?O^m{z(|vIg9ie z*`tFR6tT9^Opxk@)zab$nAK5L%w1xucl3xz=%K>|-ZO`NS{luTOOTsAvp%;CmGnnQ zsfH!B)>W@{&M_+($#pTsS`cG`H!eb-(J31C>33CD$Bq*-_)bH6Xl|}QRK}ViOsO|C z{TbJBg_laTx?YC{2KDiP0=u1ADW7C!cLR0Y^*Ez~WbigXJ{`~@hd0y6Uju#>RO8sl zO^eVcL?*NZ%Gmtq&YgS~E~nrGC}waRV^Y$JiKiE^JeR73UN4JSIJ+@FP~xE43L8oSs7853GTaR$$xB~Wz$M?o8y!Znj2F)AEVVj=P?s5T zq&OJlA0bgslu;n{uO~nZv~!R5x5;zT!5EPIYdxWa+GjuVXIg9fR5$37EQ#k7Q&m#` zTf?wbR%fO5Y5E}Jq^?%e#*i)D006=gKc!V=Tz0EJP-<@^raC=6Aw=0Wh>ZucE8z*G z74Rtq45N`zn6N1n`%o)|f%%jv!qKAucF3mI3Pp>To2UgMglV85{@nz!1aa{AbDV*G zO=|g4&p5E)ijL^P2=i*MzT|4J#rqA9b ziD?U^@Uvzi4Tpz$Yo$0|x}-Wgv`oM6P6Mvk5SK7MDaee6vfo##7`Qv~|1*QRkQkwi zLY<(mPh!f?51BZRMc3&L-HX&-4o+_J8qzCI~&PY>N^U{e+ zjce+K+e~rC&3Iu(JRBfEdDAwVaIQgjvM!@tdqw6_HNII^XR{jew}jke>BQaoY~{4L zgRM5aqay*-A4FJTWBBzmxO&jl&5(Lh%M>c&QnGr5M*0lINRB&or{bD4`3Mg@)@2li z=RVC)Oq-}OiRmM+Qvv^tfcUt*CFEaeDmtXt-TxyE0XOvjpYne0iWL+8ZyE&-JH)WT z;KTsT3qF!LIZm<`Fry27!v;Xbwl4EdYb~x$aA?K(v|>2byF%x>Rym^>Ko98!LJ$LE z0bvT4m0$#!r5XMWGRpYXW8k1;HoM{2EtHd4&tTfho~q)@x=4iiZHviV6l_zP*q^>3 zk4j#-xGg>}vbghs$GTOQLWl+OR%unIZ3cfZ$}JWN_qSayEr)@g{)JJUPC{Cv(AM9@ z2p<`;;Q%0nid!9OrFpqPdP_shMsp1;s5}f+$&-yHtJ)9dqMAms!atKNwW=@UJABV< zk&Sz3)yq=ImPGnmjuW`75B@DbHaSHa!P+{bbs7`N(9$(ArzY0!AE(LLD|FUAWo7oB z++6M*;qu;%s14q-0>?#l>0!Kgjw^dQHAk)srpku9kE=-9V~{_7)pR5Y7K&@Nd@ryX znEG=EnPl%uQO!AsMPF9rIq5$!$UIvJ>AOwlJAfrP_M3w2oFJ1F5?@pEY6&2SAJlwc zE28;%FOzkfvTNd6V}PWGY%Pj?ZRI_3Id9-M<==GXA&#mN@@m_m{*;|1T^Bn~6*X&TT=lwA z@q=5B&@S~<07zLnC(ywWY$n{<<^*J{%@Ac!LYN#n;~T)M8a9Dak(*h-fXCEAcgC^m z^n#&PN?fe;!_asjHK60p*a2WE?ng?GmcCV$bRNS&q#_{YUJAAx=GF9)0PhAoj^i3B zm4@L7LSU>^ExT~CpM1Wuh4ef=N%#OFz(K2Ld25g_&c$z9fbYiA^D?IMM{=YknIsdE z$$3E`=?SGH6@(nIgpDyKztV7@1UL=H8hgN=^paP=gt^z>Hk4`Z6R9p2@dFv+hZdIz z_J6R;=fe{Fa&e%wE-~{F%gw`%kZh(=-rHt)EKpaf+)E9&K==+!Wws(HDbr^Rpscty zDrw|loZ0bKP{O~m>yPR2O@+LrzC4WwO@Y0T^d!D!xT_vl?F)QkiIiHwEfG;>v5F81< z)Sp7_Ga1Q+t7)n5avFck98Un~u$P#?n&p63V|D{XS_BdbR1-j9brzzP9B&f#>e78t zf|iX43Obv-CoB3$h_!V+Vp^>BqLIVy4X`2e_$_GFfOGm@tI{w-x<;#cwCXhEHUn%^ zLwdv&Qx?Zq!)Fl!pu{*HvF9wP&AS+>$1To3?t_W7yapPTS#wz=dr?o0%9?$`4{SZ0 zHS1L6?uWXp=Fe7L+_(0FmDe^L05FV1(h=a(yysLeg{I$Jt)%-32kuyy=UKrd9Ko7meJz$z(g}^li^P2Y)*G%tpqByMScc}E< z1@utCB5bnt9Nn<^QTztFnL=D-PI&p66d^b>eP5rLY0ly<GRdoy|irfT5yzfD_r3NCw6{iT#f4reHB|fk1(H#*6_%ZrPrjWbm%XwG* zD}@;(WIo6Cfy9y}S(zl<`@1g3xECg|ckr<3BEm5t_U)4>4{`~xp8veQ`{p5~U; zbmPQ~d}xXN+RrSV(V}N|u&pZpS&+Sa&)u}#aNS5w9)6uKN~S-U4Fz7aH9r9T?M-FmW^~`eXwfRCT-H2jET53X+t>8$Wj%9=q?wlfF8YL1TKVCMm z$sqhLA?JazSZ+m9{kpd3H+!6j>b+LW8W<0E8ghT?D0&^V-oh>avL zyQcESbF<4UdAhCGI*p;o7xz&&i_`n2*}YuU-$5KDBGja9W}bo*+41PD%V{=0+XU{~ zXu3hpJS8Q;K2gmAph&JvG?-NZt&UDYh7ahcc>mtgnu7{fSAT(@6CWqO+`Z>DhNobk zGjhVY@JOSL_6N#Mk?j<~n;|!S>5)ROwT=nwBb0H0JnR4FY#Gmc8`H&1o8U1 z{8)cF<6H^Oz?l9v!I^RrkxL-%&9&X+(@DaxAnKo^C{?JuRRBAEZ(M?j>J*YvbNB-w z`Ke%C%gU4MT=WRvrpD5be^kAA9)tVbAi7OcnUGbk$SmL(YFPe69K_diTCw)4iz_Kp zcrVf#-Ldk|m$S`$Q1EfVFssOCZd^OIEPUuhVv{3<#?a2b&6~%j7iT6(DTp~{>`1l- zpPW2ex0P4o&U_f0NwGG6*T$5vZ<<0ca) zFTlt&8QHmWNng3W(aXfYHjapym#NvD#uccKN=%thPagSpny=KQjNKi#N%Z5v1|NkQP)9bN9JrSXQO z9ewPiWH#ujUs!Q_Jxpciu|Rwu0kPDwIQ76ly_WImsJU(^1B%#^xkfroWE_0AKG2>Z z5wpa55=S?ztoG(#Il^`sIoycMc;QZeyu6*;^x4=+f=Jm2D*L>hz80d#F z1ylMzyaa0s7qo8tx7Un9n_-Og9i8+XGz%w&GhZ-XYyEeq^~{d6dgg(L`=j%7sUDLy zcmT&m#{KAJm+POc)a>!R>}{{#&xOwIqf(;#X_HdOClehOERI_wdDeX;{ z{CYCC{;I*m(zs2*R-@tQP`6iC@Grp%=Ij^sF3bJYU6*4&vXO=I!#ifR4p3X#@7+H< zvl}K2N#P<(v12|>udFX#Qd(UUlv5<+L~YS)Pl)qCErEpjA#^fJs}6)X!k@gEwj6!7 zGr!68#_QLAG?zc1-D)6fW#N4P@z2%e0kDe}G=4JZtkyXPZr42j#SyN$rkxST7U2yz zXDxRDa2{_9UfjMk&K3(^QMK05B|D|VG0cw~R=8cU%!!!PG8jfdlX>@_?OjHrUAzn? zkzp;E4gI;U*Q*MTAGq6fYlj%mcaS?NwRw0_)SNEQJAP*F;QjPvhk7Ktxzt7@{|CB& z)x5yyy*ncz#FQ5rw_hM6PO2EE7 zCA+H){a2t$5|(#>fpsqzhXTBLtXG3BrCOhq7Nc-Ig-aPcZaf^edkd)CH77&8~q zp(BOE4Ksgi422|}>1OZgG;61pCWwur&Y8wO-la0}8wo57pMl5%oF6^)gWR~K`}WVI z3|YFM`O}sCfpwjS>0H&vJ(O#WkADxN%ZPCETR50KQmj>&=>xhyBYgIAMpwu)UtiT$ z#+bjRu`V^<#Ee=KEt0SW1xbaQtY%%~JG`as>e5bAsf7CHVkuNN-MSf|+;lr=%Lx31 zFK4IoEtMMY;!`EenCmSZIQWI)m5-i|i&-LFvR(OOhIhqOY??K{f0fyt<|g*xvOVSe zSnXTV_(z2;@7!JE(CM;3@Gl$vMyoUXd>anIG%f8@w?5}(6N_#QC33SkMz%)fm54G7 zB0^Sb`^?C_9TKTqXKSn-XZbTZxsDu-Xy?*cU!TglHTv6 z`g+?hk%gg&p{Su~N`e9>p=;7&GF{SvBWDcTwnRhormnFThR9YeQ zKx_k{Bb1GSD6E;3ysr4Jke0b{|0~+2FZH|U2k|*VdL|w?rKyTkTH7V_Xq3t}ZTMWr zI@!wZ6ILHQ6h+t6FL-Xhj?&6`VBDuPNR2AX{Gh_%zq;q}!pi#UumeNc;RokO8E!m| zMKs0lx|Saok$wA_uaI~f*HV)oa5m=qb}AD9>FoNi{!_Z8RodCqYD>Yb_{Vr%W>j((Ny} zf7o+(NmZ{O`vKz;&|&Q2arXr)JInhA5gOfc?ep5ks~|vdcUskk=7-YSXOG=Z3Z>HX z+F3XU7Cuut7}>A(D_u}KGD*qiF-3+GNG>7&|56lg|L5qp}y$4 z$T*$zXDse#5(-fL{EL|mi?eAlm_$^-Od5pXm`t|+oUQ@2P`p8e^MxVS)w3?!jUph# zp<1h-@mPw!)L`B>RI*1fe3jT)=9C}$$j!InKk)_E(~G#$Bnq3ELFp$kX9n_du0Gb+ zcs{ReIu>Vhj%rF-IdKIHNZr&g_l9oR8yC3 zxDG3z8zg8mocnG{^sA~|hoN@sy9vcr*w1d-q0SuV*;GNbh_&e@g+Xb$!X@)T@L34` z+Lg*>AQWA`#rAbs>0jA3skfx-qj%kMW2>WygfWqf<>Kh#!&LnA^5J6Z=JAmu9Qlvk z7<=pOB@I)_KVz`;S`3TL0=oe=0EHuA?E^4%aohT-$`2nHSy}0!^h!J@5oD?5JMxUW z)0j5L<3IoYVcVbHBy;dpkis@}G-QmjFV2Vhv|!BU<#Q|}E=CYR!u+Yob8k)#@i5-2 zG%QiLq=sAOUPv?M!$esTeOc~nH77IaKwc^P>!7OQuntzf^k4xE^vE``AWKQLCoCZu7DNu_E^hu*MCwGQ9o5Ya0DRAV_A`#Q1^phE*;u-sPdmMm9JhG@i~h1i zVAIubch1vuGj6U1Yq>U2{bXTQcJI>ofYmS!t7#d=Y0Y_K&K=l*h)wFoQ-qD^3|`E; zf*PfE!@zwZ1DSRrbWe5O0j=e|oacPT)QMRY?ZYJu2nWirpq~dt(RR3MiJ$)Aog}z- zsi8{5-e4R$k+yNKbmm7}uOYX5Xbe50Id}s#%Fp}qz;`Zw->+MAjW34A(&NF-_NK#Iq_{FDhQ(6B%?EvikUe9;A4OJFUAIzEQ)lt)z|ucHj8>WNDqf{G~M0tN39fP zygBrCaq4(>araaY5D%AFID#G>p@rI&fo&|UgBtIdO*`YL7Mt#XS{bl# zO&mq@aLCevtNWJRkp{S-<7ykj3SvdQ>s6$h4h_%Bovh)$TR~zzD}Aa8=X9#|R-@N0 z8F8lv{G)>y6c{Hy4!~0+kJHt$jJ0IuSgz?MhBlxrg^+V)j5UuPF@Qr)C0(kTc3P7N zb(ZbMh554KyW!mY0q7}|#Nf`1BBqH9oks^jmyF1%k8)|}no27U;8g!bz zs}{TqT-RsfyT&*<%>3M0$n?c2_MRmu71Mc_olXb^<&HB8^HEmGdQ>b~NsH91`gNqR zqSiGG(S}aM!%21&)rqyv)dLI-bVb`?rc*eql4NBt3#NL38uie~BIkn^AwGR#yGbJ3 znvM8ZOtVthlKl`=1A7RFvAg31mU;1j!`%5FwV- zTKJ1@)#}dhfzesTGn2@coKaHoaIcA>XkYI;~MygMS@52F2icJu40lp zb?Z}zVU0$mOgo#6y4Tue@i454SF24iIn((dsDVSAOw_Z4{=L|xA4ZZa7pooP&TQDE zw(0vdh?(<&U@(_gI*u})y|2t(PV1#-Ndid>2bvpe!hTb$Es6RDN~5DgZT-9Z$72uOymT?7lNRR#U#yC?P6wq zO38TknNf!=e^M<64o_hBxKF@VUms#SW-hm-jJM|?E0cmDAhPAK#Yo{Oyxuzt<#Yw} zTAoj{!HMgsk`NT>wPY)sv7pQC4p7A&u!a2@g1DnI?M#|j}6$6nPvDpD406e-i>pcU9L}vs0Gnmw}FnRmiBrq4-mt%Fb!vNq-!1Va& zz>@k}SD8^)wCJ=-O594@X0=iD*$ELMj0DVdNCDDN_BV<|FwntvU9))ykS~}7c73`# zMz?O#GYIdMl`MrNwyH-s{m{r}$NLn8xOB%|Ryc1p97_tE&gphbnw{wkc~Lwb+e9H6 zkUmcmAg*p|!!7(D7cG=lp@?yE!?A;1>H`vx-nCg>xY1yb+T2c?C9_v41zu6)KRVqt zwyg5zzJYMsF12u9{C)*NT;SPbP2hn+yQp!Qcx>pz8BdBIGn))7nviSDP&8| zD7hG34w}#Gv|d4!I3NIPI;VmG_mcr)=mSxNE+!c-advayp^5ppO%@kpg99%^6lia1 zuvsFg0~S2sHIeJkDP9Z>64xxZ%PQwT^Z z$x1rF1a@igm5^XBtVt_NOEt?8$&E+T)QW}KpkgLZKw^2{1#ec&MwTqO_J2}+k5f3bIgJt`M2fa4}CWF|p^l@xxBNjtp)}ii)!kc>6 z05)_Y3YIeMdYKaRY_^n~iyp@v7Z3~SxLU7Y{6-V^b>{my|F8em(zO+lB8hpV*H+MN zb?RkHxWfY&^ZHTZCPX$83rM7Vl%Y{{p)gnL9FkqSTnT0frcBc2uQM%RtygrLoWhJJ zRw4-m$oZ6~4k9rfhVob>KCpxmFI2R=usuqli$@y8bawU_Vi3>Y6ApP?#f#CPRV(CN zOA1_`%e$8FUEYx@*Qe+c7@nl$0+cncI1VpaON~+qFRzygDVp<2cF~kT!$MGdMrRYk z%pqE0MhV5s$FhdhOR!{zW@J7?B>lW1Hn(aqynO% zCc8rf7>jVkH3XnQk$^*+ds?@p`LWE`Xc*TW3I_CAS*JC(#Z{n}v#Syc-2c|ZBFU{R z)UwD4DPvL2Ix49H!VvxaBdvveRj$7YJDyAXdYbE8Wd+k>eiGZETYrSMmy2XQeYBs< z`le~(xMTsU=|wZ7RX?$wbXw~odG%Bm^9JEF8hdFYJ(+hEEo$qg>HVsx>ecveM(_~L z@CsOOqQKMzo?HwK^!IgjG}e`SY;UC%nhw);J{$UK!B@faLt51N1<7)f@H3J^SsX6j zTDRv&ew|3?Js;IZNJS^eE?J9~qE_M43JvajHuZ2VdmK2U{x1_N8hU$(Qd#;eGpj(-gFGvWG~1ic3m_1)s-lLQ)gW_dW|`a1WKD-HTn zIlUi>?2f3aKA8C4U}cX*oW8Xe@;5iCTU@VR(PYQWPZKSybGU zi)h&Lhtzi~v`xjpR<007KE!@6u5kN!oH&CP$3klm<6U6T3V@FjfK()Ii!VjNiYrm^ z+}v9<+?O8_9Z%*T#K3*!k>V&^c3hvR97DKsXJ+ zGK^5|Z>(uRLzSbzF)&G>F^m#CYMH}yU`{Ad25e}RWwS%y$iMl7scr^X7-!%6P5<++ zpj^y3FA}XSVOiLD561Np)j5+)*m;$Th<>hdgGWs}P|tCKZJgsJYq^Poq4PZ(* zFo@UrslP!QAX{e!8)(%o2J0R={s(hW6W=GTS|uE@Y^dQ>k+T%U0tb8A~vf;&kU4kUGm&sQ2!_@qY1hiBLpl9uxF z5#CBZcMfuXzj0BncoI+kUs)xUX3@69mX-ab1Hw;S2a zw6uXA2Z}6Q0u!wt*kS|#X8ngrusA${NFr0HG`i^y%wlu6Jib6E5=*2JDh;$dUm`p+ z%Gvob&_Z@~H(=F7MOH#Ko`zp7~H!ASV)thqOd}Gz){@(%@ OR#4h-t1!gio8|!SYu)4k literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..29950f95ff6a625cfe0435b01d5fbe6b6270c938 GIT binary patch literal 13408 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 Nle>8x|F`6G{~Lv@cWD3s literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..237f271edd1ca85a9cb78d12c142f22deec6788e GIT binary patch literal 6980 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 IHX(BV52p3?3IG5A literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..39b6f8f746c39c8c2faa9188de664475443d6b91 GIT binary patch literal 5820 zcmV;t7DMTGPew8T0RR9102aIe4*&oF05fy|02W{X0RR9100000000000000000000 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 GdM5yznhJIR literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b8b0536f96767e3e4235d7795f5bb5bb6b7d03f6 GIT binary patch literal 12648 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4a3055854ede4eaf25de2364da0fea0a05858cfc GIT binary patch literal 6684 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 Tg_Hl}z+VB4e{%Y3K;HiWz5YA{ literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3facec1ab899c8b984146e54051efafb948eb08c GIT binary patch literal 5560 zcmV;p6-VlKPew8T0RR9102R0Z4*&oF05E(202N&T0RR9100000000000000000000 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 z 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 b_t#}$xcqq6w_XMyFZ`zQkbw9<{u}=bafM%{ literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..3a6d062e660d3a9f71b0230e601dcaff83638430 GIT binary patch literal 4776 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 Sim-oV>Ot5I1I>}Z^_~IHATU(` literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.eot b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..c2b045fc3dbebff9ecede9a4a1fcf9080633fb15 GIT binary patch literal 11520 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

8*Jbd7L&ee@kTfN?Yn+ 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..7826c6c97a108759a64d1fd402428ad73c795898 GIT binary patch literal 6456 zcmZu$Wmptp*Irn5>F&;@#bs%vK|mU5L0GyQ32Bwir9oPy8>G9XJ48~DknYm`*7tpX ze$R8=bLQOVJ~QW<`Ej0S#z#|85r76j4Qf#U;Xlhu_V4)r4Mjy=b(D?{75fjYjGpq

(NU4DA#L?o{;Dr;9otr1Mq$TMr^0d79|i^ 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 YDotF!T>j=)f7=SNblRTM18vg?f+#{j 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..78e990488a9b61630e28263b73157205c0aeda96 GIT binary patch literal 20712 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 literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff2 b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..618de99d480f9a5dfeabce556f3a94bd31de1a2c GIT binary patch literal 17344 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]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 rg(syp6t8!|axc.katex{display:inline-block}.katex{font:400 1.21em KaTeX_Main;line-height:1.2;white-space:nowrap;text-indent:0}.katex .katex-html{display:inline-block}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .base,.katex .strut{display:inline-block}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .amsrm,.katex .mathbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr{font-family:KaTeX_Script}.katex .mathsf{font-family:KaTeX_SansSerif}.katex .mainit{font-family:KaTeX_Main;font-style:italic}.katex .textstyle>.mord+.mop{margin-left:.16667em}.katex .textstyle>.mord+.mbin{margin-left:.22222em}.katex .textstyle>.mord+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.mop,.katex .textstyle>.mop+.mord,.katex .textstyle>.mord+.minner{margin-left:.16667em}.katex .textstyle>.mop+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.minner{margin-left:.16667em}.katex .textstyle>.mbin+.minner,.katex .textstyle>.mbin+.mop,.katex .textstyle>.mbin+.mopen,.katex .textstyle>.mbin+.mord{margin-left:.22222em}.katex .textstyle>.mrel+.minner,.katex .textstyle>.mrel+.mop,.katex .textstyle>.mrel+.mopen,.katex .textstyle>.mrel+.mord{margin-left:.27778em}.katex .textstyle>.mclose+.mop{margin-left:.16667em}.katex .textstyle>.mclose+.mbin{margin-left:.22222em}.katex .textstyle>.mclose+.mrel{margin-left:.27778em}.katex .textstyle>.mclose+.minner,.katex .textstyle>.minner+.mop,.katex .textstyle>.minner+.mord,.katex .textstyle>.mpunct+.mclose,.katex .textstyle>.mpunct+.minner,.katex .textstyle>.mpunct+.mop,.katex .textstyle>.mpunct+.mopen,.katex .textstyle>.mpunct+.mord,.katex .textstyle>.mpunct+.mpunct,.katex .textstyle>.mpunct+.mrel{margin-left:.16667em}.katex .textstyle>.minner+.mbin{margin-left:.22222em}.katex .textstyle>.minner+.mrel{margin-left:.27778em}.katex .mclose+.mop,.katex .minner+.mop,.katex .mop+.mop,.katex .mop+.mord,.katex .mord+.mop,.katex .textstyle>.minner+.minner,.katex .textstyle>.minner+.mopen,.katex .textstyle>.minner+.mpunct{margin-left:.16667em}.katex .reset-textstyle.textstyle{font-size:1em}.katex .reset-textstyle.scriptstyle{font-size:.7em}.katex .reset-textstyle.scriptscriptstyle{font-size:.5em}.katex .reset-scriptstyle.textstyle{font-size:1.42857em}.katex .reset-scriptstyle.scriptstyle{font-size:1em}.katex .reset-scriptstyle.scriptscriptstyle{font-size:.71429em}.katex .reset-scriptscriptstyle.textstyle{font-size:2em}.katex .reset-scriptscriptstyle.scriptstyle{font-size:1.4em}.katex .reset-scriptscriptstyle.scriptscriptstyle{font-size:1em}.katex .style-wrap{position:relative}.katex .vlist{display:inline-block}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist .baseline-fix{display:inline-table;table-layout:fixed}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{width:100%}.katex .mfrac .frac-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .mfrac .frac-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.enspace{width:.5em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .llap,.katex .rlap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner{left:0}.katex .katex-logo .a{font-size:.75em;margin-left:-.32em;position:relative;top:-.2em}.katex .katex-logo .t{margin-left:-.23em}.katex .katex-logo .e{margin-left:-.1667em;position:relative;top:.2155em}.katex .katex-logo .x{margin-left:-.125em}.katex .rule{display:inline-block;border-style:solid;position:relative}.katex .overline .overline-line{width:100%}.katex .overline .overline-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .overline .overline-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.sqrt-sign{position:relative}.katex .sqrt .sqrt-line{width:100%}.katex .sqrt .sqrt-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .sqrt .sqrt-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:2em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:3.46em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:4.14em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.98em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.47142857em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.95714286em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.55714286em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.875em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.125em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.25em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.5em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.8em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.1625em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.5875em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:3.1125em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.77777778em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.88888889em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.6em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.92222222em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.3em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.76666667em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.7em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.8em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.9em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.2em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.44em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.73em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:2.07em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.49em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.58333333em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.66666667em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.75em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.83333333em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44166667em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.725em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.075em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.48611111em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.55555556em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.625em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.69444444em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.20138889em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.4375em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72916667em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.28901734em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.40462428em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.46242775em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.52023121em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.57803468em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69364162em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83236994em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.19653179em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.43930636em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.24154589em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.33816425em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.38647343em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.43478261em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.48309179em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.57971014em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69565217em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83574879em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20289855em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.20080321em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2811245em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.32128514em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.36144578em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.40160643em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48192771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57831325em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69477912em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8313253em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist>span,.katex .op-limits>.vlist>span{text-align:center}.katex .accent .accent-body>span{width:0}.katex .accent .accent-body.accent-vec>span{position:relative;left:.326em}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.025em;border-right:.05em solid #000}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist{text-align:center}.katex .mtable .col-align-l>.vlist{text-align:left}.katex .mtable .col-align-r>.vlist{text-align:right} \ No newline at end of file diff --git a/index.html b/index.html index f527c69..cb4023a 100644 --- a/index.html +++ b/index.html @@ -21,6 +21,10 @@ + + + + @@ -42,7 +46,7 @@ -

+
@@ -236,7 +240,7 @@ 1.5. - 穫取URL + 獲取URL @@ -251,7 +255,7 @@ 1.6. - 併發穫取多個URL + 併發獲取多個URL @@ -800,7 +804,7 @@ 5.10. - Recover捕穫異常 + Recover捕獲異常 @@ -1313,7 +1317,7 @@ 8.9. - 併發的退齣 + 併發的退出 @@ -1832,7 +1836,7 @@ 12.7. - 穫取結構體字段標識 + 獲取結構體字段標識 @@ -2023,6 +2027,7 @@
  • 項目主頁:http://github.com/golang-china/gopl-zh
  • 項目進度:http://github.com/golang-china/gopl-zh/blob/master/progress.md
  • 參與人員:http://github.com/golang-china/gopl-zh/blob/master/CONTRIBUTORS.md
  • +
  • 離線版本:http://github.com/golang-china/gopl-zh/archive/gh-pages.zip
  • 在線預覽:http://golang-china.github.io/gopl-zh
  • 原版官網:http://gopl.io
  • @@ -2034,7 +2039,7 @@

    前言

    “Go是一個開源的編程語言,它很容易用於構建簡單、可靠和高效的軟件。”(摘自Go語言官方網站:http://golang.org

    Go語言由來自Google公司的Robert Griesemer,Rob Pike和Ken Thompson三位大牛於2007年9月開始設計和實現,然後於2009年的11月對外正式發布(譯註:關於Go語言的創世紀過程請參考 http://talks.golang.org/2015/how-go-was-made.slide )。語言及其配套工具的設計目標是具有表達力,高效的編譯和執行效率,有效地編寫高效和健壯的程序。

    -

    Go語言有着和C語言類似的語法外表,和C語言一樣是專業程序員的必備工具,可以用最小的代價穫得最大的戰果。 +

    Go語言有着和C語言類似的語法外表,和C語言一樣是專業程序員的必備工具,可以用最小的代價獲得最大的戰果。 但是它不僅僅是一個更新的C語言。它還從其他語言借鑒了很多好的想法,同時避免引入過度的複雜性。 Go語言中和併發編程相關的特性是全新的也是有效的,同時對數據抽象和面向對象編程的支持也很靈活。 Go語言同時還集成了自動垃圾收集技術用於更好地管理內存。

    @@ -2042,7 +2047,7 @@ Go語言同時還集成了自ԭ 但是Go語言確實是一個通用的編程語言,它也可以用在圖形圖像驅動編程、移動應用程序開發 和機器學習等諸多領域。目前Go語言已經成爲受歡迎的作爲無類型的腳本語言的替代者: 因爲Go編寫的程序通常比腳本語言運行的更快也更安全,而且很少會發生意外的類型錯誤。

    -

    Go語言還是一個開源的項目,可以免費穫編譯器、庫、配套工具的源代碼。 +

    Go語言還是一個開源的項目,可以免費獲編譯器、庫、配套工具的源代碼。 Go語言的貢獻者來自一個活躍的全球社區。Go語言可以運行在類UNIX繫統—— 比如Linux、FreeBSD、OpenBSD、Mac OSX——和Plan9繫統和Microsoft Windows操作繫統之上。 Go語言編寫的程序無需脩改就可以運行在上面這些環境。

    @@ -2076,7 +2081,7 @@ Go語言編寫的程序無需ࠒ diff --git a/progress.md b/progress.md index 38161e6..3aa5970 100644 --- a/progress.md +++ b/progress.md @@ -25,8 +25,8 @@ - [x] 3.4 Booleans - [x] 3.5 Strings - [x] 3.6 Constants -- [ ] Chapter 4: Composite Types - - [ ] 4.1 Arrays +- [x] Chapter 4: Composite Types + - [x] 4.1 Arrays - [ ] 4.2 Slices - [ ] 4.3 Maps - [ ] 4.4 Structs From e8809e8c458202f371ca08f1048d1572186c5421 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Thu, 31 Dec 2015 16:20:27 +0800 Subject: [PATCH 2/7] rebuild --- CONTRIBUTORS.html | 12 +- README.md | 18 ++- ch0/ch0-01.html | 10 +- ch0/ch0-02.html | 10 +- ch0/ch0-03.html | 10 +- ch0/ch0-04.html | 10 +- ch0/ch0-05.html | 10 +- ch1/ch1-01.html | 10 +- ch1/ch1-02.html | 10 +- ch1/ch1-03.html | 10 +- ch1/ch1-04.html | 10 +- ch1/ch1-05.html | 10 +- ch1/ch1-06.html | 10 +- ch1/ch1-07.html | 10 +- ch1/ch1-08.html | 10 +- ch1/ch1.html | 10 +- ch10/ch10-01.html | 10 +- ch10/ch10-02.html | 10 +- ch10/ch10-03.html | 10 +- ch10/ch10-04.html | 10 +- ch10/ch10-05.html | 10 +- ch10/ch10-06.html | 10 +- ch10/ch10-07.html | 10 +- ch10/ch10.html | 10 +- ch11/ch11-01.html | 10 +- ch11/ch11-02.html | 10 +- ch11/ch11-03.html | 10 +- ch11/ch11-04.html | 10 +- ch11/ch11-05.html | 10 +- ch11/ch11-06.html | 10 +- ch11/ch11.html | 10 +- ch12/ch12-01.html | 10 +- ch12/ch12-02.html | 10 +- ch12/ch12-03.html | 10 +- ch12/ch12-04.html | 10 +- ch12/ch12-05.html | 10 +- ch12/ch12-06.html | 10 +- ch12/ch12-07.html | 10 +- ch12/ch12-08.html | 10 +- ch12/ch12-09.html | 10 +- ch12/ch12.html | 10 +- ch13/ch13-01.html | 10 +- ch13/ch13-02.html | 10 +- ch13/ch13-03.html | 10 +- ch13/ch13-04.html | 10 +- ch13/ch13-05.html | 10 +- ch13/ch13.html | 10 +- ch2/ch2-01.html | 10 +- ch2/ch2-02.html | 10 +- ch2/ch2-03.html | 10 +- ch2/ch2-04.html | 10 +- ch2/ch2-05.html | 10 +- ch2/ch2-06.html | 10 +- ch2/ch2-07.html | 10 +- ch2/ch2.html | 10 +- ch3/ch3-01.html | 10 +- ch3/ch3-02.html | 10 +- ch3/ch3-03.html | 10 +- ch3/ch3-04.html | 10 +- ch3/ch3-05.html | 10 +- ch3/ch3-06.html | 10 +- ch3/ch3.html | 10 +- ch4/ch4-01.html | 12 +- ch4/ch4-02.html | 261 ++++++++++++++++++++++++++++++++++++++++++-- ch4/ch4-03.html | 221 +++++++++++++++++++++++++++++++++++-- ch4/ch4-04.html | 272 ++++++++++++++++++++++++++++++++++++++++++++-- ch4/ch4-05.html | 219 ++++++++++++++++++++++++++++++++++++- ch4/ch4-06.html | 129 +++++++++++++++++++++- ch4/ch4.html | 10 +- ch5/ch5-01.html | 10 +- ch5/ch5-02.html | 10 +- ch5/ch5-03.html | 10 +- ch5/ch5-04.html | 10 +- ch5/ch5-05.html | 10 +- ch5/ch5-06.html | 10 +- ch5/ch5-07.html | 10 +- ch5/ch5-08.html | 10 +- ch5/ch5-09.html | 10 +- ch5/ch5-10.html | 10 +- ch5/ch5.html | 10 +- ch6/ch6-01.html | 10 +- ch6/ch6-02.html | 10 +- ch6/ch6-03.html | 10 +- ch6/ch6-04.html | 10 +- ch6/ch6-05.html | 10 +- ch6/ch6-06.html | 10 +- ch6/ch6.html | 10 +- ch7/ch7-01.html | 10 +- ch7/ch7-02.html | 10 +- ch7/ch7-03.html | 10 +- ch7/ch7-04.html | 10 +- ch7/ch7-05.html | 10 +- ch7/ch7-06.html | 10 +- ch7/ch7-07.html | 10 +- ch7/ch7-08.html | 10 +- ch7/ch7-09.html | 10 +- ch7/ch7-10.html | 10 +- ch7/ch7-11.html | 10 +- ch7/ch7-12.html | 10 +- ch7/ch7-13.html | 10 +- ch7/ch7-14.html | 10 +- ch7/ch7-15.html | 10 +- ch7/ch7.html | 10 +- ch8/ch8-01.html | 10 +- ch8/ch8-02.html | 10 +- ch8/ch8-03.html | 96 +++++++++++++++- ch8/ch8-04.html | 10 +- ch8/ch8-05.html | 10 +- ch8/ch8-06.html | 10 +- ch8/ch8-07.html | 110 ++++++++++++++++++- ch8/ch8-08.html | 10 +- ch8/ch8-09.html | 10 +- ch8/ch8-10.html | 10 +- ch8/ch8.html | 10 +- ch9/ch9-01.html | 10 +- ch9/ch9-02.html | 10 +- ch9/ch9-03.html | 10 +- ch9/ch9-04.html | 10 +- ch9/ch9-05.html | 10 +- ch9/ch9-06.html | 10 +- ch9/ch9-07.html | 10 +- ch9/ch9-08.html | 10 +- ch9/ch9.html | 10 +- index.html | 12 +- progress.md | 14 +-- 125 files changed, 1858 insertions(+), 648 deletions(-) diff --git a/CONTRIBUTORS.html b/CONTRIBUTORS.html index bb6ae46..e47f49a 100644 --- a/CONTRIBUTORS.html +++ b/CONTRIBUTORS.html @@ -5,7 +5,7 @@ - 附録 | Go编程语言 + 附録 | Go语言圣经 @@ -46,7 +46,7 @@ -
    +
    @@ -573,7 +573,7 @@ 4.2. - 切片 + Slice @@ -588,7 +588,7 @@ 4.3. - 字典 + Map @@ -2011,7 +2011,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2040,7 +2040,7 @@

    C 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§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 G_x*oZGDWHY literal 0 HcmV?d00001 diff --git a/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.ttf b/gitbook/plugins/gitbook-plugin-katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b3a2f38f22466e837cc0a1e8bfe166ab86787496 GIT binary patch literal 31072 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%0DXa|8k4wRBrGrW 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

    - + diff --git a/README.md b/README.md index 788f1ce..7db6803 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Go語言聖經(中文版) -Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本,僅供編程、英語學習、Gitbook、Markdown等學習交流之用。 +Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本,僅供學習交流之用。 - 項目主頁:http://github.com/golang-china/gopl-zh - 項目進度:http://github.com/golang-china/gopl-zh/blob/master/progress.md @@ -14,13 +14,19 @@ Go語言聖經 [《The Go Programming Language》](http://gopl.io) 中文版本 ### 從源文件構建 -先安裝Go語言環境,Git工具和GitBook命令行工具(`npm install gitbook-cli -g`命令)。 +先安裝NodeJS和GitBook命令行工具(`npm install gitbook-cli -g`命令)。 -1. 運行`go get github.com/golang-china/gopl-zh`,獲取源文件。 -2. 運行`go generate github.com/golang-china/gopl-zh`,生成`_book`目録。 -3. 打開`_book/index.html`文件。 +1. 下載 https://github.com/golang-china/gopl-zh/archive/master.zip ,獲取源文件。 +2. 切換到 `gopl-zh` 目録,運行 `gitbook install`,安裝GitBook插件。 +3. 運行`gitbook build`,生成`_book`目録。 +4. 打開`_book/index.html`文件。 -### 簡體中文讀者 +### 簡體/繁體轉換 + +切片到 `gopl-zh` 目録: + +- `make zh2tw` 或 `go run zh2tw.go . "\.md$" zh2tw`,轉繁體。 +- `make tw2zh` 或 `go run zh2tw.go . "\.md$" tw2zh`,轉簡體。 如果是使用簡體中文的用戶,可在執行上述命令前運行`make tw2zh`命令,將繁體中文轉換爲簡體中文。 diff --git a/ch0/ch0-01.html b/ch0/ch0-01.html index cc927fb..bbe49d1 100644 --- a/ch0/ch0-01.html +++ b/ch0/ch0-01.html @@ -5,7 +5,7 @@ - Go語言起源 | Go编程语言 + Go語言起源 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch0/ch0-02.html b/ch0/ch0-02.html index 82d087a..c25984c 100644 --- a/ch0/ch0-02.html +++ b/ch0/ch0-02.html @@ -5,7 +5,7 @@ - Go語言項目 | Go编程语言 + Go語言項目 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch0/ch0-03.html b/ch0/ch0-03.html index f5c6d66..6fd6825 100644 --- a/ch0/ch0-03.html +++ b/ch0/ch0-03.html @@ -5,7 +5,7 @@ - 本書的組織 | Go编程语言 + 本書的組織 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch0/ch0-04.html b/ch0/ch0-04.html index 5f3d87b..b81e885 100644 --- a/ch0/ch0-04.html +++ b/ch0/ch0-04.html @@ -5,7 +5,7 @@ - 更多的信息 | Go编程语言 + 更多的信息 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch0/ch0-05.html b/ch0/ch0-05.html index 22f4824..0c88b29 100644 --- a/ch0/ch0-05.html +++ b/ch0/ch0-05.html @@ -5,7 +5,7 @@ - 致謝 | Go编程语言 + 致謝 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-01.html b/ch1/ch1-01.html index 6b56595..be4b235 100644 --- a/ch1/ch1-01.html +++ b/ch1/ch1-01.html @@ -5,7 +5,7 @@ - Hello, World | Go编程语言 + Hello, World | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-02.html b/ch1/ch1-02.html index 8017d2a..0689ca4 100644 --- a/ch1/ch1-02.html +++ b/ch1/ch1-02.html @@ -5,7 +5,7 @@ - 命令行參數 | Go编程语言 + 命令行參數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-03.html b/ch1/ch1-03.html index 39a937c..fede755 100644 --- a/ch1/ch1-03.html +++ b/ch1/ch1-03.html @@ -5,7 +5,7 @@ - 査找重複的行 | Go编程语言 + 査找重複的行 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-04.html b/ch1/ch1-04.html index 65ced53..20abc86 100644 --- a/ch1/ch1-04.html +++ b/ch1/ch1-04.html @@ -5,7 +5,7 @@ - GIF動畵 | Go编程语言 + GIF動畵 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-05.html b/ch1/ch1-05.html index 2e096d6..a3a94f6 100644 --- a/ch1/ch1-05.html +++ b/ch1/ch1-05.html @@ -5,7 +5,7 @@ - 獲取URL | Go编程语言 + 獲取URL | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-06.html b/ch1/ch1-06.html index 493dd7c..a534ea5 100644 --- a/ch1/ch1-06.html +++ b/ch1/ch1-06.html @@ -5,7 +5,7 @@ - 併發獲取多個URL | Go编程语言 + 併發獲取多個URL | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-07.html b/ch1/ch1-07.html index 39e2c99..1fa5aca 100644 --- a/ch1/ch1-07.html +++ b/ch1/ch1-07.html @@ -5,7 +5,7 @@ - Web服務 | Go编程语言 + Web服務 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1-08.html b/ch1/ch1-08.html index 8c11550..7bb4b23 100644 --- a/ch1/ch1-08.html +++ b/ch1/ch1-08.html @@ -5,7 +5,7 @@ - 本章要點 | Go编程语言 + 本章要點 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch1/ch1.html b/ch1/ch1.html index ee144c7..dde6ced 100644 --- a/ch1/ch1.html +++ b/ch1/ch1.html @@ -5,7 +5,7 @@ - 入門 | Go编程语言 + 入門 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-01.html b/ch10/ch10-01.html index 7c213a3..081e0d4 100644 --- a/ch10/ch10-01.html +++ b/ch10/ch10-01.html @@ -5,7 +5,7 @@ - 簡介 | Go编程语言 + 簡介 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-02.html b/ch10/ch10-02.html index 9a34e58..4be6cf0 100644 --- a/ch10/ch10-02.html +++ b/ch10/ch10-02.html @@ -5,7 +5,7 @@ - 導入路徑 | Go编程语言 + 導入路徑 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-03.html b/ch10/ch10-03.html index 7d62e21..4134b06 100644 --- a/ch10/ch10-03.html +++ b/ch10/ch10-03.html @@ -5,7 +5,7 @@ - 包聲明 | Go编程语言 + 包聲明 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-04.html b/ch10/ch10-04.html index 1ef6b99..a9b5934 100644 --- a/ch10/ch10-04.html +++ b/ch10/ch10-04.html @@ -5,7 +5,7 @@ - 導入聲明 | Go编程语言 + 導入聲明 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-05.html b/ch10/ch10-05.html index 65db059..e5a32c2 100644 --- a/ch10/ch10-05.html +++ b/ch10/ch10-05.html @@ -5,7 +5,7 @@ - 匿名導入 | Go编程语言 + 匿名導入 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-06.html b/ch10/ch10-06.html index 13d3ddf..a34be03 100644 --- a/ch10/ch10-06.html +++ b/ch10/ch10-06.html @@ -5,7 +5,7 @@ - 包和命名 | Go编程语言 + 包和命名 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10-07.html b/ch10/ch10-07.html index 59500b6..a000ab6 100644 --- a/ch10/ch10-07.html +++ b/ch10/ch10-07.html @@ -5,7 +5,7 @@ - 工具 | Go编程语言 + 工具 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch10/ch10.html b/ch10/ch10.html index b54ea4a..6aaf6d9 100644 --- a/ch10/ch10.html +++ b/ch10/ch10.html @@ -5,7 +5,7 @@ - 包和工具 | Go编程语言 + 包和工具 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-01.html b/ch11/ch11-01.html index 909b7dd..cce5e5b 100644 --- a/ch11/ch11-01.html +++ b/ch11/ch11-01.html @@ -5,7 +5,7 @@ - go test | Go编程语言 + go test | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-02.html b/ch11/ch11-02.html index ca99aaf..868cc41 100644 --- a/ch11/ch11-02.html +++ b/ch11/ch11-02.html @@ -5,7 +5,7 @@ - 測試函數 | Go编程语言 + 測試函數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-03.html b/ch11/ch11-03.html index f6d4d8c..22647fd 100644 --- a/ch11/ch11-03.html +++ b/ch11/ch11-03.html @@ -5,7 +5,7 @@ - 測試覆蓋率 | Go编程语言 + 測試覆蓋率 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-04.html b/ch11/ch11-04.html index d32b272..fe76ddd 100644 --- a/ch11/ch11-04.html +++ b/ch11/ch11-04.html @@ -5,7 +5,7 @@ - 基準測試 | Go编程语言 + 基準測試 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-05.html b/ch11/ch11-05.html index 1c31437..fb93f55 100644 --- a/ch11/ch11-05.html +++ b/ch11/ch11-05.html @@ -5,7 +5,7 @@ - 剖析 | Go编程语言 + 剖析 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11-06.html b/ch11/ch11-06.html index 3c2c3af..408f36d 100644 --- a/ch11/ch11-06.html +++ b/ch11/ch11-06.html @@ -5,7 +5,7 @@ - 示例函數 | Go编程语言 + 示例函數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch11/ch11.html b/ch11/ch11.html index 17209ba..c3cca12 100644 --- a/ch11/ch11.html +++ b/ch11/ch11.html @@ -5,7 +5,7 @@ - 測試 | Go编程语言 + 測試 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-01.html b/ch12/ch12-01.html index ab0065d..8c13e7a 100644 --- a/ch12/ch12-01.html +++ b/ch12/ch12-01.html @@ -5,7 +5,7 @@ - 爲何需要反射? | Go编程语言 + 爲何需要反射? | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-02.html b/ch12/ch12-02.html index 75106be..fc5203b 100644 --- a/ch12/ch12-02.html +++ b/ch12/ch12-02.html @@ -5,7 +5,7 @@ - reflect.Type和reflect.Value | Go编程语言 + reflect.Type和reflect.Value | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-03.html b/ch12/ch12-03.html index a5e25d6..4845fc5 100644 --- a/ch12/ch12-03.html +++ b/ch12/ch12-03.html @@ -5,7 +5,7 @@ - Display遞歸打印 | Go编程语言 + Display遞歸打印 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-04.html b/ch12/ch12-04.html index 80804f3..8504cdc 100644 --- a/ch12/ch12-04.html +++ b/ch12/ch12-04.html @@ -5,7 +5,7 @@ - 示例: 編碼S表達式 | Go编程语言 + 示例: 編碼S表達式 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-05.html b/ch12/ch12-05.html index 14ca27a..c415762 100644 --- a/ch12/ch12-05.html +++ b/ch12/ch12-05.html @@ -5,7 +5,7 @@ - 通過reflect.Value脩改值 | Go编程语言 + 通過reflect.Value脩改值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-06.html b/ch12/ch12-06.html index eb4b281..18b6d07 100644 --- a/ch12/ch12-06.html +++ b/ch12/ch12-06.html @@ -5,7 +5,7 @@ - 示例: 解碼S表達式 | Go编程语言 + 示例: 解碼S表達式 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-07.html b/ch12/ch12-07.html index c19b66c..b93323c 100644 --- a/ch12/ch12-07.html +++ b/ch12/ch12-07.html @@ -5,7 +5,7 @@ - 獲取結構體字段標識 | Go编程语言 + 獲取結構體字段標識 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-08.html b/ch12/ch12-08.html index aefa842..3af81ac 100644 --- a/ch12/ch12-08.html +++ b/ch12/ch12-08.html @@ -5,7 +5,7 @@ - 顯示一個類型的方法集 | Go编程语言 + 顯示一個類型的方法集 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12-09.html b/ch12/ch12-09.html index 1b401d2..d82c337 100644 --- a/ch12/ch12-09.html +++ b/ch12/ch12-09.html @@ -5,7 +5,7 @@ - 幾點忠告 | Go编程语言 + 幾點忠告 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch12/ch12.html b/ch12/ch12.html index 08696ee..673637a 100644 --- a/ch12/ch12.html +++ b/ch12/ch12.html @@ -5,7 +5,7 @@ - 反射 | Go编程语言 + 反射 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13-01.html b/ch13/ch13-01.html index 963a142..1e8da81 100644 --- a/ch13/ch13-01.html +++ b/ch13/ch13-01.html @@ -5,7 +5,7 @@ - unsafe.Sizeof, Alignof 和 Offsetof | Go编程语言 + unsafe.Sizeof, Alignof 和 Offsetof | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13-02.html b/ch13/ch13-02.html index 24f130e..a3bc036 100644 --- a/ch13/ch13-02.html +++ b/ch13/ch13-02.html @@ -5,7 +5,7 @@ - unsafe.Pointer | Go编程语言 + unsafe.Pointer | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13-03.html b/ch13/ch13-03.html index c67dff7..51a5f42 100644 --- a/ch13/ch13-03.html +++ b/ch13/ch13-03.html @@ -5,7 +5,7 @@ - 示例: 深度相等判斷 | Go编程语言 + 示例: 深度相等判斷 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13-04.html b/ch13/ch13-04.html index 84c3e8b..1dcb071 100644 --- a/ch13/ch13-04.html +++ b/ch13/ch13-04.html @@ -5,7 +5,7 @@ - 通過cgo調用C代碼 | Go编程语言 + 通過cgo調用C代碼 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13-05.html b/ch13/ch13-05.html index 6aa1bed..c566f49 100644 --- a/ch13/ch13-05.html +++ b/ch13/ch13-05.html @@ -5,7 +5,7 @@ - 幾點忠告 | Go编程语言 + 幾點忠告 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch13/ch13.html b/ch13/ch13.html index 93cf7dd..2b5ba95 100644 --- a/ch13/ch13.html +++ b/ch13/ch13.html @@ -5,7 +5,7 @@ - 底層編程 | Go编程语言 + 底層編程 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-01.html b/ch2/ch2-01.html index a97f519..abc62d7 100644 --- a/ch2/ch2-01.html +++ b/ch2/ch2-01.html @@ -5,7 +5,7 @@ - 命名 | Go编程语言 + 命名 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-02.html b/ch2/ch2-02.html index f2d51a9..40c4e6a 100644 --- a/ch2/ch2-02.html +++ b/ch2/ch2-02.html @@ -5,7 +5,7 @@ - 聲明 | Go编程语言 + 聲明 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-03.html b/ch2/ch2-03.html index 2910739..8680038 100644 --- a/ch2/ch2-03.html +++ b/ch2/ch2-03.html @@ -5,7 +5,7 @@ - 變量 | Go编程语言 + 變量 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-04.html b/ch2/ch2-04.html index 16184fa..ee2e0c3 100644 --- a/ch2/ch2-04.html +++ b/ch2/ch2-04.html @@ -5,7 +5,7 @@ - 賦值 | Go编程语言 + 賦值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-05.html b/ch2/ch2-05.html index 2e78eb4..902f83c 100644 --- a/ch2/ch2-05.html +++ b/ch2/ch2-05.html @@ -5,7 +5,7 @@ - 類型 | Go编程语言 + 類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-06.html b/ch2/ch2-06.html index fe18b86..127591f 100644 --- a/ch2/ch2-06.html +++ b/ch2/ch2-06.html @@ -5,7 +5,7 @@ - 包和文件 | Go编程语言 + 包和文件 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2-07.html b/ch2/ch2-07.html index 15a8b52..781603f 100644 --- a/ch2/ch2-07.html +++ b/ch2/ch2-07.html @@ -5,7 +5,7 @@ - 作用域 | Go编程语言 + 作用域 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch2/ch2.html b/ch2/ch2.html index 2a891ed..3cb3549 100644 --- a/ch2/ch2.html +++ b/ch2/ch2.html @@ -5,7 +5,7 @@ - 程序結構 | Go编程语言 + 程序結構 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-01.html b/ch3/ch3-01.html index a4cdf40..aaf6017 100644 --- a/ch3/ch3-01.html +++ b/ch3/ch3-01.html @@ -5,7 +5,7 @@ - 整型 | Go编程语言 + 整型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-02.html b/ch3/ch3-02.html index 78bcd42..fcb5917 100644 --- a/ch3/ch3-02.html +++ b/ch3/ch3-02.html @@ -5,7 +5,7 @@ - 浮點數 | Go编程语言 + 浮點數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-03.html b/ch3/ch3-03.html index 5d4c303..7cab1f5 100644 --- a/ch3/ch3-03.html +++ b/ch3/ch3-03.html @@ -5,7 +5,7 @@ - 複數 | Go编程语言 + 複數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-04.html b/ch3/ch3-04.html index 5b3f0c0..96414e3 100644 --- a/ch3/ch3-04.html +++ b/ch3/ch3-04.html @@ -5,7 +5,7 @@ - 布爾型 | Go编程语言 + 布爾型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-05.html b/ch3/ch3-05.html index 0250ccb..67a9c4e 100644 --- a/ch3/ch3-05.html +++ b/ch3/ch3-05.html @@ -5,7 +5,7 @@ - 字符串 | Go编程语言 + 字符串 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3-06.html b/ch3/ch3-06.html index 9d94102..6223946 100644 --- a/ch3/ch3-06.html +++ b/ch3/ch3-06.html @@ -5,7 +5,7 @@ - 常量 | Go编程语言 + 常量 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch3/ch3.html b/ch3/ch3.html index 996d5f9..fc73884 100644 --- a/ch3/ch3.html +++ b/ch3/ch3.html @@ -5,7 +5,7 @@ - 基礎數據類型 | Go编程语言 + 基礎數據類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch4/ch4-01.html b/ch4/ch4-01.html index c07ccd8..b8c0249 100644 --- a/ch4/ch4-01.html +++ b/ch4/ch4-01.html @@ -5,7 +5,7 @@ - 數組 | Go编程语言 + 數組 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2125,7 +2125,7 @@ fmt.Println(a == d) // compile error: cannot compare - +
    diff --git a/ch4/ch4-02.html b/ch4/ch4-02.html index c9b2226..a05a231 100644 --- a/ch4/ch4-02.html +++ b/ch4/ch4-02.html @@ -5,7 +5,7 @@ - 切片 | Go编程语言 + Slice | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2023,12 +2023,253 @@
    -

    4.2. 切片

    -

    TODO

    +

    4.2. Slice

    +

    Slice(切片)代表變長的序列,序列中每個元素都有相同的類型。一個slice類型一般寫作[]T,其中T代表slice中元素的類型;語法和數組很像隻是沒有長度而已。

    +

    數組和slice之間有着緊密的聯繫。一個slice是一個輕量級的數據結果,提供了訪問數組子序列(或者全部)元素的功能,因爲slice的底層確實引用一個數組對象。一個slice有三個部分構成:指針、長度和容量。指針指向第一個元素對應的底層數組元素的地址,slice的第一個元素併不一定就是數組的第一個元素。長度對應slice中元素的數目;長度不能超過容量,容量一般是從slice的開始位置到底層數據的結尾位置。內置的len和cap函數分别返迴slice的長度和容量。

    +

    多個slice之間可以共享底層的數據,併且引用的數組部分區間可能重疊。圖4.1顯示了表示一年中每個月份名字的字符串數組,還有重疊引用了該數組的兩個slice。數組這樣定義

    +
    months := [...]string{1: "January", /* ... */, 12: "December"}
    +
    +

    因此一月份是months[1],十二月份是months[12]。通常,數組的第一個元素從索引0開始,但是月份一般是從1開始的,因此我們聲明數組時直接第0個元素,第0個元素會被自動初始化爲空字符串。

    +

    slice的操作s[i:j],其中0 ≤ i≤ j≤ cap(s),用於創建一個新的slice,引用s的從第i個元素開始到第j-1個元素的子序列。新的slice將隻有j-i個元素。如果i位置的索引被省略的話將使用0代替,如果j位置的索引被省略的話將使用len(s)代替。因此,months[1:13]切片操作將引用全部有效的月份,和months[1:]操作等價;months[:]切片操作則是引用整個數組。讓我們分别定義表示第二季度和北方夏天的slice,它們有重疊部分:

    +

    +
    Q2 := months[4:7]
    +summer := months[6:9]
    +fmt.Println(Q2)     // ["April" "May" "June"]
    +fmt.Println(summer) // ["June" "July" "August"]
    +
    +

    兩個slice都包含了六月份,下面的代碼是一個包含相同月份的測試(性能較低):

    +
    for _, s := range summer {
    +    for _, q := range Q2 {
    +        if s == q {
    +            fmt.Printf("%s appears in both\n", s)
    +        }
    +    }
    +}
    +
    +

    如果切片操作長處cap(s)的上限將導致一個panic異常,但是超出len(s)則是擴展了slice,因此新slice的長度會變大:

    +
    fmt.Println(summer[:20]) // panic: out of range
    +
    +endlessSummer := summer[:5] // extend a slice (within capacity)
    +fmt.Println(endlessSummer)  // "[June July August September October]"
    +
    +

    另外,字符串的切片操作和[]byte字節類型切片的切片操作是類似的。它們都寫作x[m:n],併且都是返迴一個原始字節繫列的子序列,底層都是共享之前的底層數組,因此切片操作對應常量時間複雜度。x[m:n]切片操作對於字符串則生成一個新字符串,如果x是[]byte的話則生成一個新的[]byte。

    +

    因爲slice值包含指向第一個元素的指針,因此向函數傳遞slice將運行在函數內部脩改底層數組的元素。換句話説,複雜一個slice隻是對底層的數組創建了一個新的slice别名(§2.3.2)。下面的reverse函數在原內存空間將[]int類型的slice反轉,而且它可以用於任意長度的slice。

    +
    gopl.io/ch4/rev
    +
    +// reverse reverses a slice of ints in place.
    +func reverse(s []int) {
    +    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
    +        s[i], s[j] = s[j], s[i]
    +    }
    +}
    +
    +

    這里我們反轉數組的應用:

    +
    a := [...]int{0, 1, 2, 3, 4, 5}
    +reverse(a[:])
    +fmt.Println(a) // "[5 4 3 2 1 0]"
    +
    +

    一種將slice元素循環向左镟轉n個元素的方法是三次調用reverse反轉函數,第一次是反轉開頭的n個元素,然後是反轉剩下的元素,最後是反轉整個slice的元素。(如果是向右循環镟轉,則將第三個函數調用移到第一個調用位置就可以了。)

    +
    s := []int{0, 1, 2, 3, 4, 5}
    +// Rotate s left by two positions.
    +reverse(s[:2])
    +reverse(s[2:])
    +reverse(s)
    +fmt.Println(s) // "[2 3 4 5 0 1]"
    +
    +

    要註意的是slice類型的變量s和數組類型的變量a的初始化語法的差異。slice和數組的字面值語法很類似,它們都是用花括弧包含一繫列的初始化元素,但是對於slice併沒有指明序列的長度。這會隱式地創建一個合適大小的數組,然後slice的指針指向底層的數組。就像數組字面值一樣,slice的字面值也可以按順序指定初始化值序列,或者是通過索引和元素值指定,或者的兩種風格的混合語法初始化。

    +

    和數組不同的是,slice不能比較,因此我們不能使用==操作符來判斷兩個slice是否有相同的元素。不過標準庫提供了高度優化的bytes.Equal函數來判斷兩個字節型slice是否相等([]byte),但是對於其他類型的slice,我們必鬚自己展開每個元素進行比較:

    +
    func equal(x, y []string) bool {
    +    if len(x) != len(y) {
    +        return false
    +    }
    +    for i := range x {
    +        if x[i] != y[i] {
    +            return false
    +        }
    +    }
    +    return true
    +}
    +
    +

    上面關於兩個slice的深度相等測試,運行的時間併不比支持==操作的數組或字符串更多,但是爲何slice卻不支持比較運算符呢?這方面有兩個原因。第一個原因,一個slice的元素是間接引用的,一個slice甚至可以包含自身。雖然有很多辦法處理這種情形,但是沒有一個是簡單有效的。

    +

    第二個原因,因爲slice的元素是間接引用的,一個固定值的slice在不同的時間可能包含不同的元素,因爲底層數組的元素可能會被脩改。併且Go語言中map等哈希表之類的數據結構的key隻做簡單的淺拷貝,它要求在整個聲明週期中相等的key必鬚對相同的元素。對於像指針或chan之類的引用類型,==相等測試可以判斷兩個是否是引用相同的對象。一個針對slice的淺相等測試的==操作符可能是有一定用處的,也能臨時解決map類型的key問題,但是slice和數組不同的相等測試行爲會讓人睏惑。因此,安全的做飯是直接禁止slice之間的比較操作。

    +

    slice唯一合法的比較是和nil比較,例如:

    +
    if summer == nil { /* ... */ }
    +
    +

    一個零值的slice等於nil。一個nil值的slice併沒有底層數組。一個nil值的slice的長度和容量都是0,但是也有非nil值的slice的長度和容量也是0的,例如[]int{}或make([]int, 3)[3:]。與任意類型的nil值一樣,我們可以用[]int(nil)類型轉換表達式來生成一個對應類型slice的nil值。

    +
    var s []int    // len(s) == 0, s == nil
    +s = nil        // len(s) == 0, s == nil
    +s = []int(nil) // len(s) == 0, s == nil
    +s = []int{}    // len(s) == 0, s != nil
    +
    +

    如果你需要測試一個slice是否是空的,使用len(s) == 0來判斷,而不是用s == nil來判斷。除了和nil相等比較外,一個nil值的slice的行爲和其它任意0産長度的slice一樣;例如reverse(nil)也是安全的。除了文檔已經明確説明的地方,所有的Go語言函數應該以相同的方式對待nil值的slice和0長度的slice。

    +

    內置的make函數創建一個指定元素類型、長度和容量的slice。容量部分可以省略,在這種情況下,容量將等於長度。

    +
    make([]T, len)
    +make([]T, len, cap) // same as make([]T, cap)[:len]
    +
    +

    在底層,make創建了一個匿名的數組變量,然後返迴一個slice;隻有通過返迴的slice才能引用底層匿名的數組變量。在第一種語句中,slice是整個數組的view。在第二個語句中,slice隻引用了底層數組的前len個元素,但是容量將包含整個的數組。額外的元素是留給未來的增長用的。

    4.2.1. append函數

    -

    TODO

    +

    內置的append函數用於向slice追加元素:

    +
    var runes []rune
    +for _, r := range "Hello, 世界" {
    +    runes = append(runes, r)
    +}
    +fmt.Printf("%q\n", runes) // "['H' 'e' 'l' 'l' 'o' ',' ' ' '世' '界']"
    +
    +

    在循環中使用append函數構建一個有九個rune字符構成的slice,當然對應這個特殊的問題我們可以通過Go語言內置的[]rune("Hello, 世界")轉換操作完成。

    +

    append函數對於理解slice底層是如何工作的非常重要,所以讓我們仔細査看究竟是發生了什麽。下面是第一個版本的appendInt函數,專門用於處理[]int類型的slice:

    +
    gopl.io/ch4/append
    +
    +func appendInt(x []int, y int) []int {
    +    var z []int
    +    zlen := len(x) + 1
    +    if zlen <= cap(x) {
    +        // There is room to grow.  Extend the slice.
    +        z = x[:zlen]
    +    } else {
    +        // There is insufficient space.  Allocate a new array.
    +        // Grow by doubling, for amortized linear complexity.
    +        zcap := zlen
    +        if zcap < 2*len(x) {
    +            zcap = 2 * len(x)
    +        }
    +        z = make([]int, zlen, zcap)
    +        copy(z, x) // a built-in function; see text
    +    }
    +    z[len(x)] = y
    +    return z
    +}
    +
    +

    每次調用appendInt函數,必鬚先檢測slice底層數組是否有足夠的容量來保存新添加的元素。如果有足夠空間的話,直接擴展slice(依然在原有的底層數組之上),將新添加的y元素複製到新擴展的空間,併返迴slice。因此,輸入的x和輸出的z共享相同的底層數組。

    +

    如果沒有足夠的增長空間的話,appendInt函數則會先分配一個足夠大的slice用於保存新的結果,先將輸入的x複製到新的空間,然後添加y元素。結果z和輸入的x引用的將是不同的底層數組。

    +

    雖然通過循環複製元素更直接,不過內置的copy函數可以方便地將一個slice複製另一個相同類型的slice。copy函數的第一個參數是要複製的目標slice,第二個參數是源slice,目標和源的位置順序和dst = src賦值語句是一致的。兩個slice可以共享同一個底層數組,甚至有重疊也沒有問題。copy函數將返迴成功複製的元素的個數(我們這里沒有用到),等於兩個slice中較小的長度,所以我們不用擔心覆蓋會超出目的slice的范圍。

    +

    爲了效率,新分配的數組一般略大於保存x和y所需要的最低大小。通過在每次擴展數組時直接將長度翻倍從而避免了多次內存分配,也確保了添加單個元素操的平均時間是一個常數時間。這個程序演示了效果:

    +
    func main() {
    +    var x, y []int
    +    for i := 0; i < 10; i++ {
    +        y = appendInt(x, i)
    +        fmt.Printf("%d cap=%d\t%v\n", i, cap(y), y)
    +        x = y
    +    }
    +}
    +
    +

    每一次容量的變化都會導致重新分配內存和copy操作:

    +
    0  cap=1    [0]
    +1  cap=2    [0 1]
    +2  cap=4    [0 1 2]
    +3  cap=4    [0 1 2 3]
    +4  cap=8    [0 1 2 3 4]
    +5  cap=8    [0 1 2 3 4 5]
    +6  cap=8    [0 1 2 3 4 5 6]
    +7  cap=8    [0 1 2 3 4 5 6 7]
    +8  cap=16   [0 1 2 3 4 5 6 7 8]
    +9  cap=16   [0 1 2 3 4 5 6 7 8 9]
    +

    讓我們仔細査看i=3次的迭代。當時x包含了[0 1 2]三個元素,但是容量是4,因此可以簡單將新的元素添加到末尾,不需要新的內存分配。然後新的y的長度和容量都是4,併且和x引用着相同的底層數組,如圖4.2所示。

    +

    +

    在下一次迭代時i=4,現在沒有新的空餘的空間了,因此appendInt函數分配一個容量爲8的底層數組,將x的4個元素[0 1 2 3]複製到新空間的開頭,然後添加新的元素i,新元素的值是4。新的y的長度是5,容量是8;後面有3個空閒的位置,三次迭代都不需要分配新的空間。當前迭代中,y和x是對應不用底層數組的view。這次操作如圖4.3所示。

    +

    +

    內置的append函數可能使用比appendInt更複雜的內存擴展策略。因此,通常我們併不知道append調用是否導致了內存的分配,因此我們也不能確認新的slice和原始的slice是否引用的是相同的底層數組空間。同樣,我們不能確認在原先的slice上的操作是否會影響到新的slice。因此,通常是將append返迴的結果直接賦值給輸入的slice變量:

    +
    runes = append(runes, r)
    +
    +

    更新slice變量不僅對調用append函數是必要的,實際上對應任何可能導致長度、容量或底層數組變化的操作都是必要的。要正確地使用slice,需要記住盡管底層數組的元素是間接訪問,但是slice本身的指針、長度和容量是直接訪問的。要更新這些信息需要像上面例子那樣一個顯式的賦值操作。從這個角度看,slice併不是一個純粹的引用類型,它實際上是一個類似下面結構體的聚合類型:

    +
    type IntSlice struct {
    +    ptr      *int
    +    len, cap int
    +}
    +
    +

    我們的appendInt函數每次隻能向slice追加一個元素,但是內置的append函數則可以追加多個元素,甚至追加一個slice。

    +
    var x []int
    +x = append(x, 1)
    +x = append(x, 2, 3)
    +x = append(x, 4, 5, 6)
    +x = append(x, x...) // append the slice x
    +fmt.Println(x)      // "[1 2 3 4 5 6 1 2 3 4 5 6]"
    +
    +

    通過下面的小脩改,我們可以可以達到append函數類似的功能。其中在appendInt函數參數中的最後的“...”省略號表示接收變長的參數爲slice。我們將在5.7節詳細解釋這個特性。

    +
    func appendInt(x []int, y ...int) []int {
    +    var z []int
    +    zlen := len(x) + len(y)
    +    // ...expand z to at least zlen...
    +    copy(z[len(x):], y)
    +    return z
    +}
    +
    +

    爲了避免重複,和前面相同的代碼併沒有顯示。

    4.2.2. Slice內存技巧

    -

    TODO

    +

    讓我們看看更多的例子,比如镟轉slice、反轉slice或在slice原有內存空間脩改元素。給定一個字符串列表,下面的nonempty函數將在原有slice內存空間之上返迴不包含空字符串的列表:

    +
    gopl.io/ch4/nonempty
    +
    +// Nonempty is an example of an in-place slice algorithm.
    +package main
    +
    +import "fmt"
    +
    +// nonempty returns a slice holding only the non-empty strings.
    +// The underlying array is modified during the call.
    +func nonempty(strings []string) []string {
    +    i := 0
    +    for _, s := range strings {
    +        if s != "" {
    +            strings[i] = s
    +            i++
    +        }
    +    }
    +    return strings[:i]
    +}
    +
    +

    比較微妙的地方是,輸入的slice和輸出的slice共享一個底層數組。這可以避免分配另一個數組,不過原來的數據將可能會被覆蓋,正如下面兩個打印語句看到的那樣:

    +
    data := []string{"one", "", "three"}
    +fmt.Printf("%q\n", nonempty(data)) // `["one" "three"]`
    +fmt.Printf("%q\n", data)           // `["one" "three" "three"]`
    +
    +

    因此我們通常會這樣使用nonempty函數:data = nonempty(data)。

    +

    nonempty函數也可以使用append函數實現:

    +
    func nonempty2(strings []string) []string {
    +    out := strings[:0] // zero-length slice of original
    +    for _, s := range strings {
    +        if s != "" {
    +            out = append(out, s)
    +        }
    +    }
    +    return out
    +}
    +
    +

    無論如何實現,以這種方式重用一個slice一般要求最多爲每個輸入值産生一個輸出值,事實上很多算法都是用來過濾或合併序列中相鄰的元素。這種slice用法是比較複雜的技巧,雖然使用到了slice的一些黑魔法,但是對於某些場合是比較清晰和有效的。

    +

    一個slice可以原來實現一個stack。最初給定的空slice對應一個空的stack,然後可以使用append函數將新的值壓入stack:

    +
    stack = append(stack, v) // push v
    +
    +

    stack的頂部位置對應slice的最後一個元素:

    +
    top := stack[len(stack)-1] // top of stack
    +
    +

    通過收縮stack可以彈出棧頂的元素

    +
    stack = stack[:len(stack)-1] // pop
    +
    +

    要刪除slice中間的某個元素併保存原有的元素順序,可以通過內置的copy函數將後面的子slice向前一位複雜完成:

    +
    func remove(slice []int, i int) []int {
    +    copy(slice[i:], slice[i+1:])
    +    return slice[:len(slice)-1]
    +}
    +
    +func main() {
    +    s := []int{5, 6, 7, 8, 9}
    +    fmt.Println(remove(s, 2)) // "[5 6 8 9]"
    +}
    +
    +

    如果刪除元素後不用保存原來順序的話,我們可以簡單的用最後一個元素覆蓋被刪除的元素:

    +
    func remove(slice []int, i int) []int {
    +    slice[i] = slice[len(slice)-1]
    +    return slice[:len(slice)-1]
    +}
    +
    +func main() {
    +    s := []int{5, 6, 7, 8, 9}
    +    fmt.Println(remove(s, 2)) // "[5 6 9 8]
    +}
    +
    +

    練習 4.3: 重寫reverse函數,使用數組指針代替slice。

    +

    練習 4.4: 編寫一個rotate函數,通過一次循環完成镟轉。

    +

    練習 4.5: 寫一個函數在原地完成消除[]string中相鄰重複的字符串的操作。

    +

    練習 4.6: 編寫一個函數,原地將一個UTF-8編碼的[]byte類型的slice中相鄰的空格(參考unicode.IsSpace)替換成一個空格返迴

    +

    練習 4.7: 脩改reverse函數用於原地反轉UTF-8編碼的[]byte。是否可以不用分配額外的內存?

    @@ -2042,7 +2283,7 @@ - +
    diff --git a/ch4/ch4-03.html b/ch4/ch4-03.html index d6eeeec..977f8e3 100644 --- a/ch4/ch4-03.html +++ b/ch4/ch4-03.html @@ -5,7 +5,7 @@ - 字典 | Go编程语言 + Map | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2023,8 +2023,213 @@
    -

    4.3. 字典

    -

    TODO

    +

    4.3. Map

    +

    哈希表是一種巧妙併且實用的數據結構。它是一個無序的key/value對的集合,其中所有的key都是不同的,然後通過給定的key可以在常數時間複雜度內檢索、更新或刪除對應的value。

    +

    在Go語言中,一個map就是一個哈希表的引用,map類型可以寫爲map[K]V,其中K和V分别對應key和value。map中所有的key都有相同的類型,所以的value也有着相同的類型,但是key和value之間可以是不同的數據類型。其中K對應的key必鬚是支持==比較運算符的數據類型,所以map可以通過測試key是否相等來判斷是否已經存在。雖然浮點數類型也是支持相等運算符比較的,但是將浮點數用做key類型則是一個壞的想法,正如第三章提到的,最壞的情況是可能出現的NaN和任何浮點數都不相等。對於V對應的value數據類型則沒有任何的限製。

    +

    內置的make函數可以創建一個map:

    +
    ages := make(map[string]int) // mapping from strings to ints
    +
    +

    我們也可以用map字面值的語法創建map,同時還可以指定一些最初的key/value:

    +
    ages := map[string]int{
    +    "alice":   31,
    +    "charlie": 34,
    +}
    +
    +

    這相當於

    +
    ages := make(map[string]int)
    +ages["alice"] = 31
    +ages["charlie"] = 34
    +
    +

    因此,另一種創建空的map的表達式是map[string]int{}。

    +

    Map中的元素通過key對應的下標語法訪問:

    +
    ages["alice"] = 32
    +fmt.Println(ages["alice"]) // "32"
    +
    +

    使用內置的delete函數可以刪除元素:

    +
    delete(ages, "alice") // remove element ages["alice"]
    +
    +

    所有這些操作是安全的,卽使這些元素不在map中也沒有關繫;如果一個査找失敗將返迴value類型對應的零值,例如,卽使map中不存在“bob”下面的代碼也可以正常工作,因爲ages["bob"]失敗時將返迴0。

    +
    ages["bob"] = ages["bob"] + 1 // happy birthday!
    +
    +

    而且x += y和x++等簡短賦值語法也可以用在map上,所以上面的代碼可以改寫成

    +
    ages["bob"] += 1
    +
    +

    更簡單的寫法

    +
    ages["bob"]++
    +
    +

    但是map中的元素併不是一個變量,因此我們不能對map的元素進行取址操作:

    +
    _ = &ages["bob"] // compile error: cannot take address of map element
    +
    +

    禁止對map元素取址的原因是map可能隨着元素數量的增長而重新分配更大的內存空間,從而可能導致之前的地址無效。

    +

    要想遍歷map中全部的key/value對的話,可以使用range風格的for循環實現,和之前的slice遍歷語法類似。下面的迭代語句將在每次迭代時設置name和age變量,它們對應下一個鍵/值對:

    +
    for name, age := range ages {
    +    fmt.Printf("%s\t%d\n", name, age)
    +}
    +
    +

    Map的迭代順序是不確定的,併且不同的哈希函數實現可能導致不同的遍歷順序。在實踐中,遍歷的順序是隨機的,每一次遍歷的順序都不相同。這是故意的,每次都使用隨機的遍歷順序可以強製要求程序不會依賴具體的哈希函數實現。如果要按順序遍歷key/value對,我們必鬚顯式地對key進行排序,可以使用sort包的Strings函數對字符串slice進行排序。下面是常見的處理方式:

    +
    import "sort"
    +
    +var names []string
    +for name := range ages {
    +    names = append(names, name)
    +}
    +sort.Strings(names)
    +for _, name := range names {
    +    fmt.Printf("%s\t%d\n", name, ages[name])
    +}
    +
    +

    因爲我們一開始就知道names的最終大小,因此給slice分配一個合適的大小將會更有效。下面的代碼創建了一個空的slice,但是slice的容量剛好可以放下map中全部的key:

    +
    names := make([]string, 0, len(ages))
    +
    +

    在上面的第一個range循環中,我們隻關心map中的key,所以我們忽略了第二個循環變量。在第二個循環中,我們隻關繫names中的名字,所以我們使用“_”空白標識符來忽略第一個循環變量,也就是迭代slice時的索引。

    +

    map類型的零值是nil,也就是沒有引用任何哈希表。

    +
    var ages map[string]int
    +fmt.Println(ages == nil)    // "true"
    +fmt.Println(len(ages) == 0) // "true"
    +
    +

    map上的大部分操作,包括査找、刪除、len和range循環都可以安全工作在nil值的map上,它們的行爲和一個空的map類似。但是向一個nil值的map存入元素將導致一個panic異常:

    +
    ages["carol"] = 21 // panic: assignment to entry in nil map
    +
    +

    在向map存數據前必鬚先創建map。

    +

    通過key作爲索引下標來訪問map將産生一個value。如果key在map中是存在的,那麽將得到與key對應的value;如果key不存在,那麽將得到value對應類型的零值,正如我們前面看到的ages["bob"]那樣。這個規則很實用,但是有時候可能需要知道對應的元素是否眞的是在map之中。例如,如果元素類型是一個數字,你可以需要區分一個已經存在的0,和不存在而返迴零值的0,可以像下面這樣測試:

    +
    age, ok := ages["bob"]
    +if !ok { /* "bob" is not a key in this map; age == 0. */ }
    +
    +

    你會經常看到將這兩個結合起來使用,像這樣:

    +
    if age, ok := ages["bob"]; !ok { /* ... */ }
    +
    +

    在這種場景下,map的下標語法將産生兩個值;第二個是一個布爾值,用於報告元素是否眞的存在。布爾變量一般命名爲ok,特别適合馬上用於if條件判斷部分。

    +

    和slice一樣,map之間也不能進行相等比較;唯一的例外是和nil進行比較。要判斷兩個map是否包含相同的key和value,我們必鬚通過一個循環實現:

    +
    func equal(x, y map[string]int) bool {
    +    if len(x) != len(y) {
    +        return false
    +    }
    +    for k, xv := range x {
    +        if yv, ok := y[k]; !ok || yv != xv {
    +            return false
    +        }
    +    }
    +    return true
    +}
    +
    +

    要註意我們是如何用!ok來區分元素缺失和元素不同的。我們不能簡單地用xv != y[k]判斷,那樣會導致在判斷下面兩個map時産生錯誤的結果:

    +
    // True if equal is written incorrectly.
    +equal(map[string]int{"A": 0}, map[string]int{"B": 42})
    +
    +

    Go語言中併沒有提供一個set類型,但是map中的key也是不相同的,可以用map實現類似的功能。爲了説明這一點,下面的dedup程序讀取多行輸入,但是隻打印第一次出現的行。(它是1.3節中出現的dup程序的變體。)dedup程序通過map來表示所有的輸入行所對應的set集合,以確保已經在集合存在的行不會被重複打印。

    +
    gopl.io/ch4/dedup
    +
    +func main() {
    +    seen := make(map[string]bool) // a set of strings
    +    input := bufio.NewScanner(os.Stdin)
    +    for input.Scan() {
    +        line := input.Text()
    +        if !seen[line] {
    +            seen[line] = true
    +            fmt.Println(line)
    +        }
    +    }
    +
    +    if err := input.Err(); err != nil {
    +        fmt.Fprintf(os.Stderr, "dedup: %v\n", err)
    +        os.Exit(1)
    +    }
    +}
    +
    +

    Go程序員將這種忽略value的map當作一個字符串集合,併非所有map[string]bool類型value都是無關緊要的;有一些則可能會同時包含tue和false的值。

    +

    有時候我們需要一個map或set的key是slice類型,但是map的key必鬚是可比較的,但是slice併不滿足這個條件。不過,我們可以通過兩個步驟繞過這個限製。第一步,定義一個輔助函數k,將slice轉爲map對應的string類型的key,確保隻有x和y相等時k(x) == k(y)才成立。然後創建一個key爲string類型的map,在每次對map操作時先用k輔助函數將slice轉化爲string類型。

    +

    下面的例子演示了如何使用map來記録提交相同的字符串列表的次數。它使用了fmt.Sprintf函數將字符串列表轉換爲一個字符串以用於map的key,通過%q參數忠實地記録每個字符串元素的信息:

    +
    var m = make(map[string]int)
    +
    +func k(list []string) string { return fmt.Sprintf("%q", list) }
    +
    +func Add(list []string)       { m[k(list)]++ }
    +func Count(list []string) int { return m[k(list)] }
    +
    +

    使用同樣的技術可以處理任何不可比較的key類型,而不僅僅是slice類型。它對於想使用自定義key比較函數的時候也很有用,例如在比較字符串的時候忽略大小寫。同時,輔助函數k(x)也不一定是字符串類型,它可以返迴任何可比較的類型,例如整數、數組或結構體等。

    +

    這是map的另一個例子,下面的程序用於統計輸入中每個Unicode碼點出現的次數。雖然Unicode全部碼點的數量鉅大,但是出現在特點文檔中的字符併沒有多少,使用map可以用比較自然的方式來跟蹤那些見過字符次數。

    +
    gopl.io/ch4/charcount
    +
    +// Charcount computes counts of Unicode characters.
    +package main
    +
    +import (
    +    "bufio"
    +    "fmt"
    +    "io"
    +    "os"
    +    "unicode"
    +    "unicode/utf8"
    +)
    +
    +func main() {
    +    counts := make(map[rune]int)    // counts of Unicode characters
    +    var utflen [utf8.UTFMax + 1]int // count of lengths of UTF-8 encodings
    +    invalid := 0                    // count of invalid UTF-8 characters
    +
    +    in := bufio.NewReader(os.Stdin)
    +    for {
    +        r, n, err := in.ReadRune() // returns rune, nbytes, error
    +        if err == io.EOF {
    +            break
    +        }
    +        if err != nil {
    +            fmt.Fprintf(os.Stderr, "charcount: %v\n", err)
    +            os.Exit(1)
    +        }
    +        if r == unicode.ReplacementChar && n == 1 {
    +            invalid++
    +            continue
    +        }
    +        counts[r]++
    +        utflen[n]++
    +    }
    +    fmt.Printf("rune\tcount\n")
    +    for c, n := range counts {
    +        fmt.Printf("%q\t%d\n", c, n)
    +    }
    +    fmt.Print("\nlen\tcount\n")
    +    for i, n := range utflen {
    +        if i > 0 {
    +            fmt.Printf("%d\t%d\n", i, n)
    +        }
    +    }
    +    if invalid > 0 {
    +        fmt.Printf("\n%d invalid UTF-8 characters\n", invalid)
    +    }
    +}
    +
    +

    ReadRune方法執行UTF-8解碼併返迴三個值:解碼的rune字符的值,字符UTF-8編碼後的長度,和一個錯誤值。我們可預期的錯誤值隻有對應文件結尾的io.EOF。如果輸入的是無效的UTF-8編碼的字符,返迴的將是unicode.ReplacementChar無效字符,併且編碼長度是1。

    +

    charcount程序同時打印不同UTF-8編碼長度的字符數目。對此,map併不是一個合適的數據結構;因爲UTF-8編碼的長度總是從1到utf8.UTFMax(最大是4個字節),使用數組將更有效。

    +

    作爲一個實驗,我們用charcount程序對本身的字符進行了統計。雖然大部分是英語,但是也有一些非ASCII字符。下面是排名前10的非ASCII字符:

    +

    +

    下面是不同UTF-8編碼長度的字符的數目:

    +
    len count
    +1   765391
    +2   60
    +3   70
    +4   0
    +

    Map的value類型也可以是一個聚合類型,比如是一個map或slice。在下面的代碼中,圖graph的key類型是一個字符串,value類型map[string]bool代表一個字符串集合。從概念上將,graph將一個字符串類型的key映射到一組相關的字符串集合,它們指向新的graph的key。

    +
    gopl.io/ch4/graph
    +
    +var graph = make(map[string]map[string]bool)
    +
    +func addEdge(from, to string) {
    +    edges := graph[from]
    +    if edges == nil {
    +        edges = make(map[string]bool)
    +        graph[from] = edges
    +    }
    +    edges[to] = true
    +}
    +
    +func hasEdge(from, to string) bool {
    +    return graph[from][to]
    +}
    +
    +

    其中addEdge函數惰性初始化map是一個慣用方式,也就是説在每個值首次作爲key是才初始化。addEdge函數顯示了如何讓map的零值也能正常工作;卽使from到to的邊不存在,graph[from][to]依然可以返迴一個有意義的結果。

    +

    練習 4.8: 脩改charcount程序,使用unicode.IsLetter等相關的函數,統計字母、數字等Unicode中不同的字符類别。

    +

    練習 4.9: 編寫一個程序wordfreq程序,報告輸入文本中每個單詞出現的頻率。在第一次調用Scan前先調用input.Split(bufio.ScanWords)函數,這樣可以按單詞而不是按行輸入。

    @@ -2035,7 +2240,7 @@
    - + diff --git a/ch4/ch4-04.html b/ch4/ch4-04.html index f6dd33d..52498bd 100644 --- a/ch4/ch4-04.html +++ b/ch4/ch4-04.html @@ -5,7 +5,7 @@ - 結構體 | Go编程语言 + 結構體 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2024,13 +2024,265 @@

    4.4. 結構體

    -

    TODO

    +

    結構體是一種聚合的數據類型,由零個或多個任意類型的值聚合成的實體。每個值稱爲結構體的成員。是用結構體的經典案例處理公司的員工信息,每個員工信息包含一個唯一的員工編號、員工的名字、家庭住址、出生日期、工作崗位、薪資、上級領導等等。所有的這些成員都需要綁定到一個實體,可以作爲一個整體單元被複製,作爲函數的參數或返迴值,或者是被存儲到數組中,等等。

    +

    下面兩個語句分别聲明了一個叫Employee的結構體類型,併且聲明了一個Employee類型的變量dilbert:

    +
    type Employee struct {
    +    ID        int
    +    Name      string
    +    Address   string
    +    DoB       time.Time
    +    Position  string
    +    Salary    int
    +    ManagerID int
    +}
    +
    +var dilbert Employee
    +
    +

    dilbert結構體變量的成員可以通過點操作符訪問,比如dilbert.Name和dilbert.DoB。因爲dilbert是一個變量,它所有的成員也同樣是變量,我們可以對每個成員賦值:

    +
    dilbert.Salary -= 5000 // demoted, for writing too few lines of code
    +
    +

    或者是對成員取地址,然後通過指針訪問:

    +
    position := &dilbert.Position
    +*position = "Senior " + *position // promoted, for outsourcing to Elbonia
    +
    +

    點操作符也可以和指向結構體的指針一起工作:

    +
    var employeeOfTheMonth *Employee = &dilbert
    +employeeOfTheMonth.Position += " (proactive team player)"
    +
    +

    相當於下面語句

    +
    (*employeeOfTheMonth).Position += " (proactive team player)"
    +
    +

    EmployeeByID函數將根據給定的員工ID返迴對應的員工信息結構體的指針。我們可以使用點操作符來訪問它里面的成員:

    +
    func EmployeeByID(id int) *Employee { /* ... */ }
    +
    +fmt.Println(EmployeeByID(dilbert.ManagerID).Position) // "Pointy-haired boss"
    +
    +id := dilbert.ID
    +EmployeeByID(id).Salary = 0 // fired for... no real reason
    +
    +

    後面的語句通過EmployeeByID返迴的結構體指針更新了Employee結構體的成員。如果將EmployeeByID函數的返迴值從*Employee指針類型改爲Employee值類型,那麽更新語句將不能編譯通過,因爲在賦值語句的左邊併不確定是一個變量。

    +

    通常一行對應一個結構體成員,成員的名字在前類型在後,不過如果相鄰的成員類型如果相同的話可以被合併到一行,就像下面的Name和Address成員那樣:

    +
    type Employee struct {
    +    ID            int
    +    Name, Address string
    +    DoB           time.Time
    +    Position      string
    +    Salary        int
    +    ManagerID     int
    +}
    +
    +

    結構體成員的輸入順序也有重要的意義。我們也可以將Position成員合併(因爲也是字符串類型),或者是交換Name和Address出現的先後順序,那樣的話就是定義了不同的結構體類型。通常,我們隻是將相關的成員合併到一起。

    +

    如果結構體成員名字是以大寫字母開頭的,那麽該成員就是導出的;這是Go語言導出規則決定的。一個結構體可能同時包含導出和未導出的成員。

    +

    結構體類型往往是冗長的,因爲它的每個成員可能都會占一行。雖然我們每次都可以重寫整個結構體成員,但是重複會令人厭煩。因此,完整的結構體寫法通常隻在類型聲明語句的地方出現,就像Employee類型聲明語句那樣。

    +

    一個命名爲S的結構體類型將不能再包含S類型的成員:一個聚合的值不能包含它自身。(該限製同樣適應於數組。)但是S類型的結構體可以包含*S指針類型的成員,這可以讓我們創建遞歸的數據結構,比如鏈表和樹結構等。在下面的代碼中,我們使用一個二叉樹來實現一個插入排序:

    +
    gopl.io/ch4/treesort
    +
    +type tree struct {
    +    value       int
    +    left, right *tree
    +}
    +
    +// Sort sorts values in place.
    +func Sort(values []int) {
    +    var root *tree
    +    for _, v := range values {
    +        root = add(root, v)
    +    }
    +    appendValues(values[:0], root)
    +}
    +
    +// appendValues appends the elements of t to values in order
    +// and returns the resulting slice.
    +func appendValues(values []int, t *tree) []int {
    +    if t != nil {
    +        values = appendValues(values, t.left)
    +        values = append(values, t.value)
    +        values = appendValues(values, t.right)
    +    }
    +    return values
    +}
    +
    +func add(t *tree, value int) *tree {
    +    if t == nil {
    +        // Equivalent to return &tree{value: value}.
    +        t = new(tree)
    +        t.value = value
    +        return t
    +    }
    +    if value < t.value {
    +            t.left = add(t.left, value)
    +    } else {
    +            t.right = add(t.right, value)
    +    }
    +    return t
    +}
    +
    +

    結構體類型的零值是每個成員都對是零值。通常會將零值作爲最合理的默認值。例如,在bytes.Buffer類型,結構體初始值就是一個隨時可用的空緩存,還有在第9章將會講到的sync.Mutex的零值也是有效的未鎖狀態。有時候這種零值可用的特性是自然獲得的,但是也有些類型需要一些額外的工作。

    +

    如果結構體沒有任何成員的話就是空結構體,寫作struct{}。它的大小爲0,也不包含任何信息,但是有時候依然是有價值的。有些Go語言程序員用map帶模擬set數據結構時,用它來代替map中布爾類型的value,隻是強調key的重要性,但是因爲節約的空間有限,而且語法比較複雜,所有我們通常避免避免這樣的用法。

    +
    seen := make(map[string]struct{}) // set of strings
    +// ...
    +if _, ok := seen[s]; !ok {
    +    seen[s] = struct{}{}
    +    // ...first time seeing s...
    +}
    +

    4.4.1. 結構體面值

    -

    TODO

    +

    結構體值可以用結構體面值表示,結構體面值可以指定每個成員的值。

    +
    type Point struct{ X, Y int }
    +
    +p := Point{1, 2}
    +
    +

    這里有兩種形式的結構體面值語法,上面的是第一種寫法,要求以結構體成員定義的順序爲每個結構體成員指定一個面值。它要求寫代碼和讀代碼的人要記住結構體的每個成員的類型和順序,併且結構體成員有細微的調整就可能導致上述代碼不能編譯。因此,上述的語法一般隻在定義結構體的包內部使用,或者是在較小的結構體中使用,這些結構體的成員排列比較規則,比如image.Point{x, y}或color.RGBA{red, green, blue, alpha}。

    +

    其實更常用的是第二種寫法,以成員名字和相應的值來初始化,可以包含部分或全部的成員,如1.4節的Lissajous程序的寫法:

    +
    anim := gif.GIF{LoopCount: nframes}
    +
    +

    在這種形式的結構體面值寫法中,如果成員被忽略的話將默認用零值。因爲,提供了成員的名字,所有成員出現的順序併不重要。

    +

    兩種不同形式的寫法不能混合使用。而且,你不能企圖在外部包中用第一種順序賦值的技巧來偷偷地初始化結構體中未導出的成員。

    +
    package p
    +type T struct{ a, b int } // a and b are not exported
    +
    +package q
    +import "p"
    +var _ = p.T{a: 1, b: 2} // compile error: can't reference a, b
    +var _ = p.T{1, 2}       // compile error: can't reference a, b
    +
    +

    雖然上面最後一行代碼的編譯錯誤信息中併沒有顯式提到未導出的成員,但是這樣企圖隱式使用未導出成員的行爲也是不允許的。

    +

    結構體可以作爲函數的參數和返迴值。例如,這個Scale函數將Point類型的值縮放後返迴:

    +
    func Scale(p Point, factor int) Point {
    +    return Point{p.X * factor, p.Y * factor}
    +}
    +
    +fmt.Println(Scale(Point{1, 2}, 5)) // "{5 10}"
    +
    +

    如果考慮效率的話,較大的結構體通常會用指針的方式傳入和返迴,

    +
    func Bonus(e *Employee, percent int) int {
    +    return e.Salary * percent / 100
    +}
    +
    +

    如果要在函數內部脩改結構體成員的話,用指針傳入是必鬚的;因爲在Go語言中,所有的函數參數都是值拷貝出入的,函數參數將不再是函數調用時的原始變量。

    +
    func AwardAnnualRaise(e *Employee) {
    +    e.Salary = e.Salary * 105 / 100
    +}
    +
    +

    因爲結構體通常通過指針處理,可以用下面的寫法來創建併初始化一個結構體變量,併返迴結構體的地址:

    +
    pp := &Point{1, 2}
    +
    +

    它是下面的語句是等價的

    +
    pp := new(Point)
    +*pp = Point{1, 2}
    +
    +

    不過&Point{1, 2}寫法可以直接在表達式中使用,比如一個函數調用。

    4.4.2. 結構體比較

    -

    TODO

    +

    如果結構體的全部成員都是可以比較的,那麽結構體也是可以比較的,那樣的話兩個結構體將可以使用==或!=運算符進行比較。相等比較運算符==將比較兩個結構體的每個成員,因此下面兩個比較的表達式是等價的:

    +
    type Point struct{ X, Y int }
    +
    +p := Point{1, 2}
    +q := Point{2, 1}
    +fmt.Println(p.X == q.X && p.Y == q.Y) // "false"
    +fmt.Println(p == q)                   // "false"
    +
    +

    可比較的結構體類型和其他可比較的類型一樣,可以用於map的key類型。

    +
    type address struct {
    +    hostname string
    +    port     int
    +}
    +
    +hits := make(map[address]int)
    +hits[address{"golang.org", 443}]++
    +

    4.4.3. 結構體嵌入和匿名成員

    -

    TODO

    +

    在本節中,我們將看到如果使用Go語言提供的不同尋常的結構體嵌入機製讓一個命名的結構體包含另一個結構體類型的匿名成員,這樣就可以通過簡單的點運算符x.f來訪問匿名成員鏈中嵌套的x.d.e.f成員。

    +

    考慮一個二維的繪圖程序,提供了一個各種圖形的庫,例如矩形、橢圓形、星形和輪形等幾何形狀。這里是其中兩個的定義:

    +
    type Circle struct {
    +    X, Y, Radius int
    +}
    +
    +type Wheel struct {
    +    X, Y, Radius, Spokes int
    +}
    +
    +

    一個Circle代表的圓形類型包含了標準圓心的X和Y坐標信息,和一個Radius表示的半徑信息。一個Wheel輪形除了包含Circle類型所有的全部成員外,還增加了Spokes表示徑向輻條的數量。我們可以這樣創建一個wheel變量:

    +
    var w Wheel
    +w.X = 8
    +w.Y = 8
    +w.Radius = 5
    +w.Spokes = 20
    +
    +

    隨着庫中幾何形狀數量的增多,我們一定會註意到它們之間的相似和重複之處,所以我們可能爲了便於維護而將相同的屬性獨立出來:

    +
    type Point struct {
    +    X, Y int
    +}
    +
    +type Circle struct {
    +    Center Point
    +    Radius int
    +}
    +
    +type Wheel struct {
    +    Circle Circle
    +    Spokes int
    +}
    +
    +

    這樣改動之後結構體類型變的清晰了,但是這種脩改同時也導致了訪問每個成員變得繁瑣:

    +
    var w Wheel
    +w.Circle.Center.X = 8
    +w.Circle.Center.Y = 8
    +w.Circle.Radius = 5
    +w.Spokes = 20
    +
    +

    Go語言有一個特性讓我們隻聲明一個成員對應的數據類型而不指名成員的名字;這類成員就叫匿名成員。匿名成員的數據類型必鬚是命名的類型或指向一個命名的類型的指針。下面的代碼中,Circle和Wheel各自都有一個匿名成員。我們可以説Point類型被嵌入了Circle結構體,同時Circle類型被嵌入了Wheel結構體。

    +
    type Circle struct {
    +    Point
    +    Radius int
    +}
    +
    +type Wheel struct {
    +    Circle
    +    Spokes int
    +}
    +
    +

    得意於匿名嵌入的特性,我們可以直接訪問葉子屬性而不需要給出完整的路徑:

    +
    var w Wheel
    +w.X = 8            // equivalent to w.Circle.Point.X = 8
    +w.Y = 8            // equivalent to w.Circle.Point.Y = 8
    +w.Radius = 5       // equivalent to w.Circle.Radius = 5
    +w.Spokes = 20
    +
    +

    在右邊的註釋中給出的顯式形式訪問這些葉子成員的語法依然有效,因此匿名成員併不是眞的無法訪問了。其中匿名成員Circle和Point都有自己的名字——就是命名的類型名字——但是這些名字在點操作符中是可選的。我們在訪問子成員的時候可以忽略任何匿名成員部分。

    +

    不幸的是,結構體字面值併沒有簡短表示匿名成員的語法, 因此下面的語句都不能編譯通過:

    +
    w = Wheel{8, 8, 5, 20}                       // compile error: unknown fields
    +w = Wheel{X: 8, Y: 8, Radius: 5, Spokes: 20} // compile error: unknown fields
    +
    +

    結構體字面值必鬚遵循形狀類型聲明時的結構,所以我們隻能用下面的兩種語法,它們彼此是等價的:

    +
    gopl.io/ch4/embed
    +
    +w = Wheel{Circle{Point{8, 8}, 5}, 20}
    +
    +w = Wheel{
    +    Circle: Circle{
    +        Point:  Point{X: 8, Y: 8},
    +        Radius: 5,
    +    },
    +    Spokes: 20, // NOTE: trailing comma necessary here (and at Radius)
    +}
    +
    +fmt.Printf("%#v\n", w)
    +// Output:
    +// Wheel{Circle:Circle{Point:Point{X:8, Y:8}, Radius:5}, Spokes:20}
    +
    +w.X = 42
    +
    +fmt.Printf("%#v\n", w)
    +// Output:
    +// Wheel{Circle:Circle{Point:Point{X:42, Y:8}, Radius:5}, Spokes:20}
    +
    +

    需要註意的是Printf函數中%v參數包含的#副詞,它表示用和Go語言類似的語法打印值。對於結構體類型來説,將包含每個成員的名字。

    +

    因爲匿名成員也有一個隱式的名字,因此不能同時包含兩個類型相同的匿名成員,這會導致名字衝突。同時,因爲成員的名字是由其類型隱式地決定的,所有匿名成員也有可見性的規則約束。在上面的例子中,Point和Circle匿名成員都是導出的。卽使它們不導出(比如改成小寫字母開頭的point和circle),我們依然可以用簡短形式訪問匿名成員嵌套的成員

    +
    w.X = 8 // equivalent to w.circle.point.X = 8
    +
    +

    但是在包外部,因爲circle和point沒有導出不能訪問它們的成員,因此簡短語法也是禁止的。

    +

    到目前未知,我們看到匿名成員特性隻是對訪問嵌套成員的點運算符提供了簡短的語法醣。稍後,我們將會看到匿名成員併不要求是結構體類型;其實任何命令的類型都可以作爲結構體的匿名成員。但是爲什麽要嵌入一個沒有任何子成員類型的匿名成員類型呢?

    +

    答案是匿名類型的方法集。簡短的點運算符語法可以用於選擇匿名成員嵌套的成員,也可以用於訪問它們的方法。實際上,外層的結構體不僅僅是獲得了匿名成員類型的所有成員,而且也獲得了該類型導出的全部的方法。這個機製可以用於將一個有簡單行爲的對象組合成有複雜行爲的對象。組合是Go語言中面向對象編程的覈心,我們將在6.3節中專門討論。

    @@ -2041,7 +2293,7 @@
    - + diff --git a/ch4/ch4-05.html b/ch4/ch4-05.html index a151838..ba19114 100644 --- a/ch4/ch4-05.html +++ b/ch4/ch4-05.html @@ -5,7 +5,7 @@ - JSON | Go编程语言 + JSON | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2024,7 +2024,214 @@

    4.5. JSON

    -

    TODO

    +

    JavaScript對象表示法(JSON)是一種用於發送和接收結構化信息的標準協議。JSON併不是唯一標準協議。 XML(§7.14)、ASN.1和Google的Protocol Buffers都是類似的協議,併且有各自的特色,但是由於簡潔性、可讀性和流行程度等原因,JSON是應用最廣泛的一個。

    +

    Go語言對於這些標準格式的編碼和解碼都有良好的支持,由標準庫中的encoding/json、encoding/xml、encoding/asn1等包提供(譯註:Protocol Buffers的支持由 github.com/golang/protobuf 包提供),併且這類包都有着相似的API接口。本節,我們將對重要的encoding/json包的用法做個概述。

    +

    JSON是對JavaScript中各種值——字符串、數字、布爾值和對象——Unicode本文編碼。它可以用有效可讀的方式表示第三章的基礎數據類型和本章的數組、slice、結構體和map等聚合數據類型。

    +

    基本的JSON類型有數字(十進製或科學記數法)、布爾值(true或false)、字符串,其中字符串是以雙引號包含的Unicode字符序列,支持和Go語言類似的反斜槓轉義特性,不過JSON使用的是\Uhhhh轉義數字來表示一個UTF-16編碼,而不是Go語言的rune類型。

    +

    這些基礎類型可以通過JSON的數組和對象類型進行遞歸組合。一個JSON數組是一個有序的值序列,寫在一個方括號中併以逗號分隔;一個JSON數組可以用於編碼Go語言的數組和slice。一個JSON對象是一個字符串到值的映射,寫成以繫列的name:value對形式,用花括號包含併以逗號分隔;JSON的對象類型可以用於編碼Go語言的map類型(key類型是字符串)和結構體。例如:

    +
    boolean         true
    +number          -273.15
    +string          "She said \"Hello, BF\""
    +array           ["gold", "silver", "bronze"]
    +object          {"year": 1980,
    +                 "event": "archery",
    +                 "medals": ["gold", "silver", "bronze"]}
    +

    考慮一個應用程序,該程序負責收集各種電影評論併提供反饋功能。它的Movie數據類型和一個典型的表示電影的值列表如下所示。(其中結構體聲明中,Year和Color成員後面的字符串面值是結構體成員Tag;我們稍後會解釋它的作用。)

    +
    gopl.io/ch4/movie
    +
    +type Movie struct {
    +    Title  string
    +    Year   int  `json:"released"`
    +    Color  bool `json:"color,omitempty"`
    +    Actors []string
    +}
    +
    +var movies = []Movie{
    +    {Title: "Casablanca", Year: 1942, Color: false,
    +        Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}},
    +    {Title: "Cool Hand Luke", Year: 1967, Color: true,
    +        Actors: []string{"Paul Newman"}},
    +    {Title: "Bullitt", Year: 1968, Color: true,
    +        Actors: []string{"Steve McQueen", "Jacqueline Bisset"}},
    +    // ...
    +}
    +
    +

    這樣的數據結構特别適合JSON格式,併且在兩種之間相互轉換也很容易。將一個Go語言中類似movies的結構體slice轉爲JSON的過程叫編組(marshaling)。編組通過調用json.Marshal函數完成:

    +
    data, err := json.Marshal(movies)
    +if err != nil {
    +    log.Fatalf("JSON marshaling failed: %s", err)
    +}
    +fmt.Printf("%s\n", data)
    +
    +

    Marshal函數生成一個字節slice,包含很長的字符串,併且沒有空白縮進;我們將它摺行以便於顯示:

    +
    [{"Title":"Casablanca","released":1942,"Actors":["Humphrey Bogart","Ingr
    +id Bergman"]},{"Title":"Cool Hand Luke","released":1967,"color":true,"Ac
    +tors":["Paul Newman"]},{"Title":"Bullitt","released":1968,"color":true,"
    +Actors":["Steve McQueen","Jacqueline Bisset"]}]
    +

    這種緊湊的表示形式雖然包含了全部的信息,但是很難閲讀。爲了生成便於閲讀的格式,另一個json.MarshalIndent函數將産生整齊縮進的輸出。有兩個額外的字符串參數用於表示每一行輸出的前綴和每一個層級的縮進:

    +
    data, err := json.MarshalIndent(movies, "", "    ")
    +if err != nil {
    +    log.Fatalf("JSON marshaling failed: %s", err)
    +}
    +fmt.Printf("%s\n", data)
    +
    +

    上面的代碼將産生這樣的輸出:

    +
    [
    +    {
    +        "Title": "Casablanca",
    +        "released": 1942,
    +        "Actors": [
    +            "Humphrey Bogart",
    +            "Ingrid Bergman"
    +        ]
    +    },
    +    {
    +        "Title": "Cool Hand Luke",
    +        "released": 1967,
    +        "color": true,
    +        "Actors": [
    +            "Paul Newman"
    +        ]
    +    },
    +    {
    +        "Title": "Bullitt",
    +        "released": 1968,
    +        "color": true,
    +        "Actors": [
    +            "Steve McQueen",
    +            "Jacqueline Bisset"
    +        ]
    +    }
    +]
    +
    +

    在編碼時,默認使用Go語言結構體的成員名字作爲JSON的對象(通過reflect反射技術,我們將在12.6節討論)。隻有導出的結構體成員才會被編碼,這也就是我們爲什麽選擇用大寫字母開頭的成員名稱。

    +

    細心的讀者可能已經註意到,其中Year名字的成員在編碼後變成了released,還有Color長遠編碼後變成了小寫字母開頭的color。這是因爲構體成員Tag所導致的。一個構體成員Tag是和在編譯階段關聯到該成員的元信息字符串:

    +
    Year  int  `json:"released"`
    +Color bool `json:"color,omitempty"`
    +

    結構體的成員Tag可以是任意的字符串面值,但是通常是一繫列用空格分隔的key:"value"鍵值對序列;因爲值中含義雙引號字符,因此成員Tag一般用原生字符串面值的形式書寫。json開頭鍵對應的值用於控製encoding/json包的編碼和解碼的行爲,併且encoding/...下面其它的包也遵循這個約定。成員Tag中json對應值的第一部分用於指定JSON對象的名字,比如將Go語言中的TotalCount成員對應到JSON中的total_count對象。Color成員的Tag還帶了一個額外的omitempty選項,表示當Go語言結構體成員爲空或零值時不生成JSON對象(這里false爲零值)。果然,Casablanca是一個黑白電影,併沒有輸出Color成員。

    +

    編碼的逆操作是解碼,對應將JSON數據解碼爲GO語言的數據結構,Go語言中一般叫unmarshaling,通過json.Unmarshal函數完成。下面的代碼將JSON格式的電影數據解碼爲一個結構體slice,結構體中隻有Title成員。通過定義合適的Go語言數據結構,我們可以選擇性地解碼JSON中感興趣的成員。當Unmarshal返迴,slice將被隻含有Title信息值填充,其它JSON成員將被忽略。

    +
    var titles []struct{ Title string }
    +if err := json.Unmarshal(data, &titles); err != nil {
    +    log.Fatalf("JSON unmarshaling failed: %s", err)
    +}
    +fmt.Println(titles) // "[{Casablanca} {Cool Hand Luke} {Bullitt}]"
    +
    +

    許多web服務都提供JSON接口,通過HTTP接口發送JSON格式請求併返迴JSON格式的信息。爲了説明這一點,我們通過Github的issue査詢服務。首先,我們要定義合適的類型和常量:

    +
    gopl.io/ch4/github
    +// Package github provides a Go API for the GitHub issue tracker.
    +// See https://developer.github.com/v3/search/#search-issues.
    +package github
    +
    +import "time"
    +
    +const IssuesURL = "https://api.github.com/search/issues"
    +
    +type IssuesSearchResult struct {
    +    TotalCount int `json:"total_count"`
    +    Items          []*Issue
    +}
    +
    +type Issue struct {
    +    Number    int
    +    HTMLURL   string `json:"html_url"`
    +    Title     string
    +    State     string
    +    User      *User
    +    CreatedAt time.Time `json:"created_at"`
    +    Body      string    // in Markdown format
    +}
    +
    +type User struct {
    +    Login   string
    +    HTMLURL string `json:"html_url"`
    +}
    +
    +

    和前面一樣,卽使對應的JSON對象名是小寫字母,每個結構體的成員名也是聲明爲大小字母開頭的。因爲有些JSON成員名字和Go結構體成員名字併不相同,因此需要Go語言結構體成員Tag來指定對應的JSON名字。同樣,在解碼的時候也需要做同樣的處理,GitHub服務返迴的信息比我們定義的要多很多。

    +

    SearchIssues函數發出一個HTTP請求,然後解碼返迴的JSON格式的結果。因爲用戶提供的査詢條件可能包含類似?&之類的特殊字符,爲了避免對URL造成衝突,我們用url.QueryEscape來對査詢中的特殊字符進行轉義操作。

    +
    gopl.io/ch4/github
    +package github
    +
    +import (
    +    "encoding/json"
    +    "fmt"
    +    "net/http"
    +    "net/url"
    +    "strings"
    +)
    +
    +// SearchIssues queries the GitHub issue tracker.
    +func SearchIssues(terms []string) (*IssuesSearchResult, error) {
    +    q := url.QueryEscape(strings.Join(terms, " "))
    +    resp, err := http.Get(IssuesURL + "?q=" + q)
    +    if err != nil {
    +        return nil, err
    +    }
    +
    +    // We must close resp.Body on all execution paths.
    +    // (Chapter 5 presents 'defer', which makes this simpler.)
    +    if resp.StatusCode != http.StatusOK {
    +        resp.Body.Close()
    +        return nil, fmt.Errorf("search query failed: %s", resp.Status)
    +    }
    +
    +    var result IssuesSearchResult
    +    if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
    +        resp.Body.Close()
    +        return nil, err
    +    }
    +    resp.Body.Close()
    +    return &result, nil
    +}
    +
    +

    在早些的例子中,我們使用了json.Unmarshal函數來將JSON格式的字符串解碼爲字節slice。但是這個例子中,我們使用了基於流式的解碼器json.Decoder,它可以從一個流解碼JSON數據,盡管這不是必鬚的。如您所料,還有一個針對輸出流的json.Encoder編碼對象。

    +

    我們調用Decode方法來填充變量。這里有多種方法可以格式化結構。下面是最簡單的一種,以一個固定寬度打印每個issue,但是在下一節我們將看到如果利用模闆來輸出複雜的格式。

    +
    gopl.io/ch4/issues
    +
    +// Issues prints a table of GitHub issues matching the search terms.
    +package main
    +
    +import (
    +    "fmt"
    +    "log"
    +    "os"
    +
    +    "gopl.io/ch4/github"
    +)
    +
    +func main() {
    +    result, err := github.SearchIssues(os.Args[1:])
    +    if err != nil {
    +        log.Fatal(err)
    +    }
    +    fmt.Printf("%d issues:\n", result.TotalCount)
    +    for _, item := range result.Items {
    +        fmt.Printf("#%-5d %9.9s %.55s\n",
    +            item.Number, item.User.Login, item.Title)
    +    }
    +}
    +
    +

    通過命令行參數指定檢索條件。下面的命令是査詢Go語言項目中和JSON解碼相關的問題,還有査詢返迴的結果:

    +
    $ go build gopl.io/ch4/issues
    +$ ./issues repo:golang/go is:open json decoder
    +13 issues:
    +#5680    eaigner encoding/json: set key converter on en/decoder
    +#6050  gopherbot encoding/json: provide tokenizer
    +#8658  gopherbot encoding/json: use bufio
    +#8462  kortschak encoding/json: UnmarshalText confuses json.Unmarshal
    +#5901        rsc encoding/json: allow override type marshaling
    +#9812  klauspost encoding/json: string tag not symmetric
    +#7872  extempora encoding/json: Encoder internally buffers full output
    +#9650    cespare encoding/json: Decoding gives errPhase when unmarshalin
    +#6716  gopherbot encoding/json: include field name in unmarshal error me
    +#6901  lukescott encoding/json, encoding/xml: option to treat unknown fi
    +#6384    joeshaw encoding/json: encode precise floating point integers u
    +#6647    btracey x/tools/cmd/godoc: display type kind of each named type
    +#4237  gjemiller encoding/base64: URLEncoding padding is optional
    +

    GitHub的Web服務接口 https://developer.github.com/v3/ 包含了更多的特性。

    +

    練習 4.10: 脩改issues程序,根據問題的時間進行分類,比如不到一個月的、不到一年的、超過一年。

    +

    練習 4.11: 編寫一個工具,允許用戶在命令行創建、讀取、更新和刪除GitHub上的issue,當必要的時候自動打開用戶默認的編輯器用於輸入文本信息。

    +

    練習 4.12: 流行的web漫畵服務xkcd也提供了JSON接口。例如,一個 https://xkcd.com/571/info.0.json 請求將返迴一個很多人喜愛的571編號的詳細描述。下載每個鏈接(隻下載一次)然後創建一個離線索引。編寫一個xkcd工具,使用這些離線索引,打印和命令行輸入的檢索詞相匹配的漫畵的URL。

    +

    練習 4.13: 使用開放電影數據庫的JSON服務接口,允許你檢索和下載 https://omdbapi.com/ 上電影的名字和對應的海報圖像。編寫一個poster工具,通過命令行輸入的電影名字,下載對應的海報。

    diff --git a/ch4/ch4-06.html b/ch4/ch4-06.html index 4458a6a..d23714c 100644 --- a/ch4/ch4-06.html +++ b/ch4/ch4-06.html @@ -5,7 +5,7 @@ - 文本和HTML模闆 | Go编程语言 + 文本和HTML模闆 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2024,7 +2024,124 @@

    4.6. 文本和HTML模闆

    -

    TODO

    +

    前面的例子,隻是最簡單的格式,使用Printf是完全足夠的。但是有時候會需要複雜的打印格式,這時候一般需要將格式化代碼分離出來以便更安全地脩改。這寫功能是由text/template和html/template等模闆包提供的,它們提供了一個用變量值填充到一個文本或HTML格式的模闆的機製。

    +

    一個模闆是一個字符串或一個文件,里面包含了一個或多個由雙花括號包含的action對象。大部分的字符串隻是按面值打印,但是對於actions部分將觸發其它的行爲。買個actions包好了一個用模闆語言書寫的表達式,一個雖然簡短但是可以輸出複雜的打印值,模闆語言包含通過選擇結構體的成員、調用函數或方法、表達式控製流if-else語句和range循環語句,還有其它實例化模闆等諸多特性。下面是一個簡單的模闆字符串:

    +
    gopl.io/ch4/issuesreport
    +
    +const templ = `{{.TotalCount}} issues:
    +{{range .Items}}----------------------------------------
    +Number: {{.Number}}
    +User:   {{.User.Login}}
    +Title:  {{.Title | printf "%.64s"}}
    +Age:    {{.CreatedAt | daysAgo}} days
    +{{end}}`
    +
    +

    這個模闆先打印匹配到的issue總數,然後打印每個issue的編號、創建用戶、標題還有存在的時間。每一個action,都有一個當前值的概念,對應點操作符,寫作“.”。當前值“.”最初被初始化爲調用模闆是的參數,在當前例子中對應github.IssuesSearchResult類型的變量。模闆中{{.TotalCount}}對應action將展開爲結構體中TotalCount成員以默認的方式打印的值。模闆中{{range .Items}}{{end}}對應一個循環action,因此它們直接的內容可能會被展開多次,循環每次迭代的當前值對應當前的Items元素的值。

    +

    在一個action中,|操作符表示將前一個表達式的結果作爲後一個函數的輸入,類似於UNIX中管道的概念。在Title這一行的action中,第二個操作是一個printf函數,是一個基於fmt.Sprintf實現的內置函數,所有模闆都可以直接使用。對於Age部分,第二個動作是一個叫daysAgo的函數,通過time.Since函數將CreatedAt成員轉換爲過去的時間長度:

    +
    func daysAgo(t time.Time) int {
    +    return int(time.Since(t).Hours() / 24)
    +}
    +
    +

    需要註意的是CreatedAt的參數類型是time.Time,併不是字符串。以同樣的方式,我們可以通過定義一些方法來控製字符串的格式化(§2.5),一個類型同樣可以定製自己的JSON編碼和解碼行爲。time.Time類型對應的JSON值是一個標準時間格式的字符串。

    +

    生成模闆的輸出需要兩個處理步驟。第一步是要分析模闆併轉爲內部表示,然後基於指定的輸入執行模闆。分析模闆部分一般隻需要執行一次。下面的代碼創建併分析上面定義的模闆templ。註意方法調用鏈的順序:template.New先創建併返迴一個模闆;Funcs方法將daysAgo等自定義函數註冊到模闆中,併返迴模闆;最後調用Parse函數分析模闆。

    +
    report, err := template.New("report").
    +    Funcs(template.FuncMap{"daysAgo": daysAgo}).
    +    Parse(templ)
    +if err != nil {
    +    log.Fatal(err)
    +}
    +
    +

    因爲模闆通常在編譯時就測試好了,如果模闆解析失敗將是一個致命的錯誤。template.Must輔助函數可以簡化這個致命錯誤的處理:它接受一個模闆和一個error類型的參數,檢測error是否爲nil(如果不是則發出panic異常),然後返迴傳入的模闆。我們將在5.9節再討論這個話題。

    +

    一旦模闆已經創建、註冊了daysAgo函數、併通過分析和檢測,我們就可以使用github.IssuesSearchResult作爲輸入源、os.Stdout作爲輸出源來執行模闆:

    +
    var report = template.Must(template.New("issuelist").
    +    Funcs(template.FuncMap{"daysAgo": daysAgo}).
    +    Parse(templ))
    +
    +func main() {
    +    result, err := github.SearchIssues(os.Args[1:])
    +    if err != nil {
    +        log.Fatal(err)
    +    }
    +    if err := report.Execute(os.Stdout, result); err != nil {
    +        log.Fatal(err)
    +    }
    +}
    +
    +

    程序輸出一個純文本報告:

    +
    $ go build gopl.io/ch4/issuesreport
    +$ ./issuesreport repo:golang/go is:open json decoder
    +13 issues:
    +----------------------------------------
    +Number: 5680
    +User:      eaigner
    +Title:     encoding/json: set key converter on en/decoder
    +Age:       750 days
    +----------------------------------------
    +Number: 6050
    +User:      gopherbot
    +Title:     encoding/json: provide tokenizer
    +Age:       695 days
    +----------------------------------------
    +...
    +

    現在讓我們轉到html/template模闆包。它使用和text/template包相同的API和模闆語言,但是增加了一個將字符串自動轉義,以避免輸入字符串和HTML、JavaScript、CSS或URL語法産生衝突的問題。這個特性可以避免一些長期存在的安全問題,比如通過生成HTML註入攻擊,通過構造一個含有惡意代碼的問題標題,這些都可能讓模闆輸出錯誤的輸出,從而讓他們控製頁面。

    +

    下面的模闆以HTML格式輸出issue列表。註意import語句的不同:

    +
    gopl.io/ch4/issueshtml
    +
    +import "html/template"
    +
    +var issueList = template.Must(template.New("issuelist").Parse(`
    +<h1>{{.TotalCount}} issues</h1>
    +<table>
    +<tr style='text-align: left'>
    +  <th>#</th>
    +  <th>State</th>
    +  <th>User</th>
    +  <th>Title</th>
    +</tr>
    +{{range .Items}}
    +<tr>
    +  <td><a href='{{.HTMLURL}}'>{{.Number}}</td>
    +  <td>{{.State}}</td>
    +  <td><a href='{{.User.HTMLURL}}'>{{.User.Login}}</a></td>
    +  <td><a href='{{.HTMLURL}}'>{{.Title}}</a></td>
    +</tr>
    +{{end}}
    +</table>
    +`))
    +
    +

    下面的命令將在新的模闆上執行一個稍微不同的査詢:

    +
    $ go build gopl.io/ch4/issueshtml
    +$ ./issueshtml repo:golang/go commenter:gopherbot json encoder >issues.html
    +
    +

    圖4.4顯示了在web瀏覽器中的效果圖。每個issue包含到Github對應頁面的鏈接。

    +

    +

    圖4.4中的沒有問題會對HTML格式産生衝突,但是我們馬上將看到標題中含有&<字符的issue。下面的命令選擇了兩個這樣的issue:

    +
    $ ./issueshtml repo:golang/go 3133 10535 >issues2.html
    +

    圖4.5顯示了該査詢的結果。註意,html/template包已經自動將特殊字符轉義,我們依然可以看到正確的字面值。如果我們使用text/template包的話,這2個issue將會産生錯誤,其中“<”四個字符將會被當作小於字符“<”處理,同時“”字符串將會被當作一個鏈接元素處理,它們都會導致HTML文檔結構的改變,從而導致有未知的風險。

    +

    我們也可以通過對信任的HTML字符串使用template.HTML類型來抑製這種自動轉義的行爲。還有很多采用類型命名的字符串類型對應信任的JavaScript、CSS和URL。下面的程序演示了兩個使用不同類型的相同字符串産生的不同結果:A是一個普通字符串,B是一個信任的template.HTML字符串類型。

    +

    +
    gopl.io/ch4/autoescape
    +
    +func main() {
    +    const templ = `<p>A: {{.A}}</p><p>B: {{.B}}</p>`
    +    t := template.Must(template.New("escape").Parse(templ))
    +    var data struct {
    +        A string        // untrusted plain text
    +        B template.HTML // trusted HTML
    +    }
    +    data.A = "<b>Hello!</b>"
    +    data.B = "<b>Hello!</b>"
    +    if err := t.Execute(os.Stdout, data); err != nil {
    +        log.Fatal(err)
    +    }
    +}
    +
    +

    圖4.6顯示了出現在瀏覽器中的模闆輸出。我們看到A的黑體標記被轉義失效了,但是B沒有。

    +

    +

    我們這里隻講述了模闆繫統中最基本的特性。一如旣往,如果想了解更多的信息,請自己査看包文檔:

    +
    $ go doc text/template
    +$ go doc html/template
    +

    練習 4.14: 創建一個web服務器,査詢一次GitHub,然後生成BUG報告、里程碑和對應的用戶信息。

    diff --git a/ch4/ch4.html b/ch4/ch4.html index 5774a5c..9483ff5 100644 --- a/ch4/ch4.html +++ b/ch4/ch4.html @@ -5,7 +5,7 @@ - 複合數據類型 | Go编程语言 + 複合數據類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-01.html b/ch5/ch5-01.html index 1eeeff6..1fa738b 100644 --- a/ch5/ch5-01.html +++ b/ch5/ch5-01.html @@ -5,7 +5,7 @@ - 函數聲明 | Go编程语言 + 函數聲明 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-02.html b/ch5/ch5-02.html index 5f2cf9c..bcb6630 100644 --- a/ch5/ch5-02.html +++ b/ch5/ch5-02.html @@ -5,7 +5,7 @@ - 遞歸 | Go编程语言 + 遞歸 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-03.html b/ch5/ch5-03.html index 58ca7aa..80ef316 100644 --- a/ch5/ch5-03.html +++ b/ch5/ch5-03.html @@ -5,7 +5,7 @@ - 多返迴值 | Go编程语言 + 多返迴值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-04.html b/ch5/ch5-04.html index 8b02bec..9f3dcd8 100644 --- a/ch5/ch5-04.html +++ b/ch5/ch5-04.html @@ -5,7 +5,7 @@ - 錯誤 | Go编程语言 + 錯誤 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-05.html b/ch5/ch5-05.html index 058eab4..2241121 100644 --- a/ch5/ch5-05.html +++ b/ch5/ch5-05.html @@ -5,7 +5,7 @@ - 函數值 | Go编程语言 + 函數值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-06.html b/ch5/ch5-06.html index 365ba1a..ecd53aa 100644 --- a/ch5/ch5-06.html +++ b/ch5/ch5-06.html @@ -5,7 +5,7 @@ - 匿名函數 | Go编程语言 + 匿名函數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-07.html b/ch5/ch5-07.html index 4f04aa9..453233b 100644 --- a/ch5/ch5-07.html +++ b/ch5/ch5-07.html @@ -5,7 +5,7 @@ - 可變參數 | Go编程语言 + 可變參數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-08.html b/ch5/ch5-08.html index 1835af3..5af8c9d 100644 --- a/ch5/ch5-08.html +++ b/ch5/ch5-08.html @@ -5,7 +5,7 @@ - Deferred函數 | Go编程语言 + Deferred函數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-09.html b/ch5/ch5-09.html index 0176cbb..95f4b84 100644 --- a/ch5/ch5-09.html +++ b/ch5/ch5-09.html @@ -5,7 +5,7 @@ - Panic異常 | Go编程语言 + Panic異常 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5-10.html b/ch5/ch5-10.html index b6ac08a..3c7311b 100644 --- a/ch5/ch5-10.html +++ b/ch5/ch5-10.html @@ -5,7 +5,7 @@ - Recover捕獲異常 | Go编程语言 + Recover捕獲異常 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch5/ch5.html b/ch5/ch5.html index cb8dc0a..f377fba 100644 --- a/ch5/ch5.html +++ b/ch5/ch5.html @@ -5,7 +5,7 @@ - 函數 | Go编程语言 + 函數 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-01.html b/ch6/ch6-01.html index cb17ec5..66a7bf4 100644 --- a/ch6/ch6-01.html +++ b/ch6/ch6-01.html @@ -5,7 +5,7 @@ - 方法聲明 | Go编程语言 + 方法聲明 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-02.html b/ch6/ch6-02.html index 5e00dc9..cc7bba1 100644 --- a/ch6/ch6-02.html +++ b/ch6/ch6-02.html @@ -5,7 +5,7 @@ - 基於指針對象的方法 | Go编程语言 + 基於指針對象的方法 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-03.html b/ch6/ch6-03.html index 0e7d5db..3ffcadf 100644 --- a/ch6/ch6-03.html +++ b/ch6/ch6-03.html @@ -5,7 +5,7 @@ - 通過嵌入結構體來擴展類型 | Go编程语言 + 通過嵌入結構體來擴展類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-04.html b/ch6/ch6-04.html index 5408932..0136252 100644 --- a/ch6/ch6-04.html +++ b/ch6/ch6-04.html @@ -5,7 +5,7 @@ - 方法值和方法表達式 | Go编程语言 + 方法值和方法表達式 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-05.html b/ch6/ch6-05.html index 59d9556..51d9c10 100644 --- a/ch6/ch6-05.html +++ b/ch6/ch6-05.html @@ -5,7 +5,7 @@ - 示例: Bit數組 | Go编程语言 + 示例: Bit數組 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6-06.html b/ch6/ch6-06.html index 64e6d09..d6c4162 100644 --- a/ch6/ch6-06.html +++ b/ch6/ch6-06.html @@ -5,7 +5,7 @@ - 封裝 | Go编程语言 + 封裝 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch6/ch6.html b/ch6/ch6.html index d6c10c6..b39c5a3 100644 --- a/ch6/ch6.html +++ b/ch6/ch6.html @@ -5,7 +5,7 @@ - 方法 | Go编程语言 + 方法 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-01.html b/ch7/ch7-01.html index 64d31cb..41f9fee 100644 --- a/ch7/ch7-01.html +++ b/ch7/ch7-01.html @@ -5,7 +5,7 @@ - 接口是合約 | Go编程语言 + 接口是合約 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-02.html b/ch7/ch7-02.html index cfd03a7..901605e 100644 --- a/ch7/ch7-02.html +++ b/ch7/ch7-02.html @@ -5,7 +5,7 @@ - 接口類型 | Go编程语言 + 接口類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-03.html b/ch7/ch7-03.html index 02ca809..e4b5ef6 100644 --- a/ch7/ch7-03.html +++ b/ch7/ch7-03.html @@ -5,7 +5,7 @@ - 實現接口的條件 | Go编程语言 + 實現接口的條件 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-04.html b/ch7/ch7-04.html index 9a65cb6..b558f5a 100644 --- a/ch7/ch7-04.html +++ b/ch7/ch7-04.html @@ -5,7 +5,7 @@ - flag.Value接口 | Go编程语言 + flag.Value接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-05.html b/ch7/ch7-05.html index f048918..2614040 100644 --- a/ch7/ch7-05.html +++ b/ch7/ch7-05.html @@ -5,7 +5,7 @@ - 接口值 | Go编程语言 + 接口值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-06.html b/ch7/ch7-06.html index b06bc75..7de7425 100644 --- a/ch7/ch7-06.html +++ b/ch7/ch7-06.html @@ -5,7 +5,7 @@ - sort.Interface接口 | Go编程语言 + sort.Interface接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-07.html b/ch7/ch7-07.html index 104687d..c357fd7 100644 --- a/ch7/ch7-07.html +++ b/ch7/ch7-07.html @@ -5,7 +5,7 @@ - http.Handler接口 | Go编程语言 + http.Handler接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-08.html b/ch7/ch7-08.html index e81cb0b..f067694 100644 --- a/ch7/ch7-08.html +++ b/ch7/ch7-08.html @@ -5,7 +5,7 @@ - error接口 | Go编程语言 + error接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-09.html b/ch7/ch7-09.html index f193eeb..cebf0d1 100644 --- a/ch7/ch7-09.html +++ b/ch7/ch7-09.html @@ -5,7 +5,7 @@ - 示例: 表達式求值 | Go编程语言 + 示例: 表達式求值 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-10.html b/ch7/ch7-10.html index 57866fb..ab8103d 100644 --- a/ch7/ch7-10.html +++ b/ch7/ch7-10.html @@ -5,7 +5,7 @@ - 類型斷言 | Go编程语言 + 類型斷言 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-11.html b/ch7/ch7-11.html index e7a9507..d1eb5fd 100644 --- a/ch7/ch7-11.html +++ b/ch7/ch7-11.html @@ -5,7 +5,7 @@ - 基於類型斷言識别錯誤類型 | Go编程语言 + 基於類型斷言識别錯誤類型 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-12.html b/ch7/ch7-12.html index eb93214..56377ae 100644 --- a/ch7/ch7-12.html +++ b/ch7/ch7-12.html @@ -5,7 +5,7 @@ - 通過類型斷言査詢接口 | Go编程语言 + 通過類型斷言査詢接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-13.html b/ch7/ch7-13.html index 2c5dac2..71b4158 100644 --- a/ch7/ch7-13.html +++ b/ch7/ch7-13.html @@ -5,7 +5,7 @@ - 類型分支 | Go编程语言 + 類型分支 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-14.html b/ch7/ch7-14.html index bd6bebe..bcc91b5 100644 --- a/ch7/ch7-14.html +++ b/ch7/ch7-14.html @@ -5,7 +5,7 @@ - 示例: 基於標記的XML解碼 | Go编程语言 + 示例: 基於標記的XML解碼 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7-15.html b/ch7/ch7-15.html index e9c4a73..1fd06e0 100644 --- a/ch7/ch7-15.html +++ b/ch7/ch7-15.html @@ -5,7 +5,7 @@ - 補充幾點 | Go编程语言 + 補充幾點 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch7/ch7.html b/ch7/ch7.html index 9413938..f1aaa67 100644 --- a/ch7/ch7.html +++ b/ch7/ch7.html @@ -5,7 +5,7 @@ - 接口 | Go编程语言 + 接口 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-01.html b/ch8/ch8-01.html index d86213b..d044cbe 100644 --- a/ch8/ch8-01.html +++ b/ch8/ch8-01.html @@ -5,7 +5,7 @@ - Goroutines | Go编程语言 + Goroutines | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-02.html b/ch8/ch8-02.html index 0e5e8aa..33ddf16 100644 --- a/ch8/ch8-02.html +++ b/ch8/ch8-02.html @@ -5,7 +5,7 @@ - 示例: 併發的Clock服務 | Go编程语言 + 示例: 併發的Clock服務 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-03.html b/ch8/ch8-03.html index f726bc4..767b6bb 100644 --- a/ch8/ch8-03.html +++ b/ch8/ch8-03.html @@ -5,7 +5,7 @@ - 示例: 併發的Echo服務 | Go编程语言 + 示例: 併發的Echo服務 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2024,7 +2024,91 @@

    8.3. 示例: 併發的Echo服務

    -

    TODO

    +

    clock服務器每一個連接都會起一個goroutine。在本節中我們會創建一個echo服務器,這個服務在每個連接中會有多個goroutine。大多數echo服務僅僅會返迴他們讀取到的內容,就像下面這個簡單的handleConn函數所做的一樣:

    +
    func handleConn(c net.Conn) {
    +    io.Copy(c, c) // NOTE: ignoring errors
    +    c.Close()
    +}
    +
    +

    一個更有意思的echo服務應該模擬一個實際的echo的“迴響”,併且一開始要用大寫HELLO來表示“聲音很大”,之後經過一小段延遲返迴一個有所緩和的Hello,然後一個全小寫字母的hello表示聲音漸漸變小直至消失,像下面這個版本的handleConn(譯註:笑看作者腦洞大開):

    +
    gopl.io/ch8/reverb1
    +func echo(c net.Conn, shout string, delay time.Duration) {
    +    fmt.Fprintln(c, "\t", strings.ToUpper(shout))
    +    time.Sleep(delay)
    +    fmt.Fprintln(c, "\t", shout)
    +    time.Sleep(delay)
    +    fmt.Fprintln(c, "\t", strings.ToLower(shout))
    +}
    +
    +func handleConn(c net.Conn) {
    +    input := bufio.NewScanner(c)
    +    for input.Scan() {
    +        echo(c, input.Text(), 1*time.Second)
    +    }
    +    // NOTE: ignoring potential errors from input.Err()
    +    c.Close()
    +}
    +
    +

    我們需要陞級我們的客戶端程序,這樣它就可以發送終端的輸入到服務器,併把服務端的返迴輸出到終端上,這使我們有了使用併發的另一個好機會:

    +
    gopl.io/ch8/netcat2
    +func main() {
    +    conn, err := net.Dial("tcp", "localhost:8000")
    +    if err != nil {
    +        log.Fatal(err)
    +    }
    +    defer conn.Close()
    +    go mustCopy(os.Stdout, conn)
    +    mustCopy(conn, os.Stdin)
    +}
    +
    +

    當main goroutine從標準輸入流中讀取內容併將其發送給服務器時,另一個goroutine會讀取併打印服務端的響應。當main goroutine碰到輸入終止時,例如,用戶在終端中按了Control-D(^D),在windows上是Control-Z,這時程序就會被終止,盡管其它goroutine中還有進行中的任務。(在8.4.1中引入了channels後我們會明白如何讓程序等待兩邊都結束)。

    +

    下面這個會話中,客戶端的輸入是左對齊的,服務端的響應會用縮進來區别顯示。 +客戶端會向服務器“喊三次話”:

    +
    $ go build gopl.io/ch8/reverb1
    +$ ./reverb1 &
    +$ go build gopl.io/ch8/netcat2
    +$ ./netcat2
    +Hello?
    +    HELLO?
    +    Hello?
    +    hello?
    +Is there anybody there?
    +    IS THERE ANYBODY THERE?
    +Yooo-hooo!
    +    Is there anybody there?
    +    is there anybody there?
    +    YOOO-HOOO!
    +    Yooo-hooo!
    +yooo-hooo!
    +^D
    +$ killall reverb1
    +

    註意客戶端的第三次shout在前一個shout處理完成之前一直沒有被處理,這貌似看起來不是特别“現實”。眞實世界里的迴響應該是會由三次shout的迴聲組合而成的。爲了模擬眞實世界的迴響,我們需要更多的goroutine來做這件事情。這樣我們就再一次地需要go這個關鍵詞了,這次我們用它來調用echo:

    +
    gopl.io/ch8/reverb2
    +func handleConn(c net.Conn) {
    +    input := bufio.NewScanner(c)
    +    for input.Scan() {
    +        go echo(c, input.Text(), 1*time.Second)
    +    }
    +    // NOTE: ignoring potential errors from input.Err()
    +    c.Close()
    +}
    +
    +

    go後跟的函數的參數會在go語句自身執行時被求值;因此input.Text()會在main goroutine中被求值。 +現在迴響是併發併且會按時間來覆蓋掉其它響應了:

    +
    $ go build gopl.io/ch8/reverb2
    +$ ./reverb2 &
    +$ ./netcat2
    +Is there anybody there?
    +    IS THERE ANYBODY THERE?
    +Yooo-hooo!
    +    Is there anybody there?
    +    YOOO-HOOO!
    +    is there anybody there?
    +    Yooo-hooo!
    +    yooo-hooo!
    +^D
    +$ killall reverb2
    +

    讓服務使用併發不隻是處理多個客戶端的請求,甚至在處理單個連接時也可能會用到,就像我們上面的兩個go關鍵詞的用法。然而在我們使用go關鍵詞的同時,需要慎重地考慮net.Conn中的方法在併發地調用時是否安全,事實上對於大多數類型來説也確實不安全。我們會在下一章中詳細地探討併發安全性。

    diff --git a/ch8/ch8-04.html b/ch8/ch8-04.html index b8f3869..f68e670 100644 --- a/ch8/ch8-04.html +++ b/ch8/ch8-04.html @@ -5,7 +5,7 @@ - Channels | Go编程语言 + Channels | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-05.html b/ch8/ch8-05.html index bc7b234..4597849 100644 --- a/ch8/ch8-05.html +++ b/ch8/ch8-05.html @@ -5,7 +5,7 @@ - 併行的循環 | Go编程语言 + 併行的循環 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-06.html b/ch8/ch8-06.html index 4a1a76d..d737d2c 100644 --- a/ch8/ch8-06.html +++ b/ch8/ch8-06.html @@ -5,7 +5,7 @@ - 示例: 併發的Web爬蟲 | Go编程语言 + 示例: 併發的Web爬蟲 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-07.html b/ch8/ch8-07.html index 3d65708..41f42c9 100644 --- a/ch8/ch8-07.html +++ b/ch8/ch8-07.html @@ -5,7 +5,7 @@ - 基於select的多路複用 | Go编程语言 + 基於select的多路複用 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2024,7 +2024,105 @@

    8.7. 基於select的多路複用

    -

    TODO

    +

    下面的程序會進行火箭發射的倒計時。time.Tick函數返迴一個channel,程序會週期性地像一個節拍器一樣向這個channel發送事件。每一個事件的值是一個時間戳,不過更有意思的是其傳送方式。

    +
    gopl.io/ch8/countdown1
    +func main() {
    +    fmt.Println("Commencing countdown.")
    +    tick := time.Tick(1 * time.Second)
    +    for countdown := 10; countdown > 0; countdown-- {
    +        fmt.Println(countdown)
    +        j<-tick
    +    }
    +    launch()
    +}
    +
    +

    現在我們讓這個程序支持在倒計時中,用戶按下return鍵時直接中斷發射流程。首先,我們啟動一個goroutine,這個goroutine會嚐試從標準輸入中調入一個單獨的byte併且,如果成功了,會向名爲abort的channel發送一個值。

    +
    gopl.io/ch8/countdown2
    +abort := make(chan struct{})
    +go func() {
    +    os.Stdin.Read(make([]byte, 1)) // read a single byte
    +    abort <- struct{}{}
    +}()
    +
    +

    現在每一次計數循環的迭代都需要等待兩個channel中的其中一個返迴事件了:ticker channel當一切正常時(就像NASA jorgon的"nominal",譯註:這梗估計我們是不懂了)或者異常時返迴的abort事件。我們無法做到從每一個channel中接收信息,如果我們這麽做的話,如果第一個channel中沒有事件發過來那麽程序就會立刻被阻塞,這樣我們就無法收到第二個channel中發過來的事件。這時候我們需要多路複用(multiplex)這些操作了,爲了能夠多路複用,我們使用了select語句。

    +
    select {
    +case <-ch1:
    +    // ...
    +case x := <-ch2:
    +    // ...use x...
    +case ch3 <- y:
    +    // ...
    +default:
    +    // ...
    +}
    +
    +

    上面是select語句的一般形式。和switch語句稍微有點相似,也會有幾個case和最後的default選擇支。每一個case代表一個通信操作(在某個channel上進行發送或者接收)併且會包含一些語句組成的一個語句塊。一個接收表達式可能隻包含接收表達式自身(譯註:不把接收到的值賦值給變量什麽的),就像上面的第一個case,或者包含在一個簡短的變量聲明中,像第二個case里一樣;第二種形式讓你能夠引用接收到的值。

    +

    select會等待case中有能夠執行的case時去執行。當條件滿足時,select才會去通信併執行case之後的語句;這時候其它通信是不會執行的。一個沒有任何case的select語句寫作select{},會永遠地等待下去。

    +

    讓我們迴到我們的火箭發射程序。time.After函數會立卽返迴一個channel,併起一個新的goroutine在經過特定的時間後向該channel發送一個獨立的值。下面的select語句會會一直等待到兩個事件中的一個到達,無論是abort事件或者一個10秒經過的事件。如果10秒經過了還沒有abort事件進入,那麽火箭就會發射。

    +
    func main() {
    +    // ...create abort channel...
    +
    +    fmt.Println("Commencing countdown.  Press return to abort.")
    +    select {
    +    case <-time.After(10 * time.Second):
    +        // Do nothing.
    +    case <-abort:
    +        fmt.Println("Launch aborted!")
    +        return
    +    }
    +    launch()
    +}
    +
    +

    下面這個例子更微秒。ch這個channel的buffer大小是1,所以會交替的爲空或爲滿,所以隻有一個case可以進行下去,無論i是奇數或者偶數,它都會打印0 2 4 6 8。

    +
    ch := make(chan int, 1)
    +for i := 0; i < 10; i++ {
    +    select {
    +    case x := <-ch:
    +        fmt.Println(x) // "0" "2" "4" "6" "8"
    +    case ch <- i:
    +    }
    +}
    +
    +

    如果多個case同時就緒時,select會隨機地選擇一個執行,這樣來保證每一個channel都有平等的被select的機會。增加前一個例子的buffer大小會使其輸出變得不確定,因爲當buffer旣不爲滿也不爲空時,select語句的執行情況就像是拋硬幣的行爲一樣是隨機的。

    +

    下面讓我們的發射程序打印倒計時。這里的select語句會使每次循環迭代等待一秒來執行退出操作。

    +
    gopl.io/ch8/countdown3
    +func main() {
    +    // ...create abort channel...
    +
    +    fmt.Println("Commencing countdown.  Press return to abort.")
    +    tick := time.Tick(1 * time.Second)
    +    for countdown := 10; countdown > 0; countdown-- {
    +        fmt.Println(countdown)
    +        select {
    +        case <-tick:
    +            // Do nothing.
    +        case <-abort:
    +            fmt.Println("Launch aborted!")
    +            return
    +        }
    +    }
    +    launch()
    +}
    +
    +

    time.Tick函數表現得好像它創建了一個在循環中調用time.Sleep的goroutine,每次被喚醒時發送一個事件。當countdown函數返迴時,它會停止從tick中接收事件,但是ticker這個goroutine還依然存活,繼續徒勞地嚐試從channel中發送值,然而這時候已經沒有其它的goroutine會從該channel中接收值了--這被稱爲goroutine洩露(§8.4.4)。

    +

    Tick函數挺方便,但是隻有當程序整個生命週期都需要這個時間時我們使用它才比較合適。否則的話,我們應該使用下面的這種模式:

    +
    ticker := time.NewTicker(1 * time.Second)
    +<-ticker.C // receive from the ticker's channel
    +ticker.Stop() // cause the ticker's goroutine to terminate
    +
    +

    有時候我們希望能夠從channel中發送或者接收值,併避免因爲發送或者接收導致的阻塞,尤其是當channel沒有準備好寫或者讀時。select語句就可以實現這樣的功能。select會有一個default來設置當其它的操作都不能夠馬上被處理時程序需要執行哪些邏輯。

    +

    下面的select語句會在abort channel中有值時,從其中接收值;無值時什麽都不做。這是一個非阻塞的接收操作;反複地做這樣的操作叫做“輪詢channel”。

    +
    select {
    +case <-abort:
    +    fmt.Printf("Launch aborted!\n")
    +    return
    +default:
    +    // do nothing
    +}
    +
    +

    channel的零值是nil。也許會讓你覺得比較奇怪,nil的channel有時候也是有一些用處的。因爲對一個nil的channel發送和接收操作會永遠阻塞,在select語句中操作nil的channel永遠都不會被select到。

    +

    這使得我們可以用nil來激活或者禁用case,來達成處理其它輸入或輸出事件時超時和取消的邏輯。我們會在下一節中看到一個例子。

    +

    練習8.8: 使用select來改造8.3節中的echo服務器,爲其增加超時,這樣服務器可以在客戶端10秒中沒有任何喊話時自動斷開連接。

    diff --git a/ch8/ch8-08.html b/ch8/ch8-08.html index f8da3bf..1c3f663 100644 --- a/ch8/ch8-08.html +++ b/ch8/ch8-08.html @@ -5,7 +5,7 @@ - 示例: 併發的字典遍歷 | Go编程语言 + 示例: 併發的字典遍歷 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-09.html b/ch8/ch8-09.html index 9c2b8bf..4417c33 100644 --- a/ch8/ch8-09.html +++ b/ch8/ch8-09.html @@ -5,7 +5,7 @@ - 併發的退出 | Go编程语言 + 併發的退出 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8-10.html b/ch8/ch8-10.html index 46826a6..0441d10 100644 --- a/ch8/ch8-10.html +++ b/ch8/ch8-10.html @@ -5,7 +5,7 @@ - 示例: 聊天服務 | Go编程语言 + 示例: 聊天服務 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch8/ch8.html b/ch8/ch8.html index 471b7ed..2f33d0f 100644 --- a/ch8/ch8.html +++ b/ch8/ch8.html @@ -5,7 +5,7 @@ - Goroutines和Channels | Go编程语言 + Goroutines和Channels | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-01.html b/ch9/ch9-01.html index 9939581..5f49c22 100644 --- a/ch9/ch9-01.html +++ b/ch9/ch9-01.html @@ -5,7 +5,7 @@ - 競爭條件 | Go编程语言 + 競爭條件 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-02.html b/ch9/ch9-02.html index 02dd298..c3fc363 100644 --- a/ch9/ch9-02.html +++ b/ch9/ch9-02.html @@ -5,7 +5,7 @@ - sync.Mutex互斥鎖 | Go编程语言 + sync.Mutex互斥鎖 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-03.html b/ch9/ch9-03.html index 7d38f2c..b392454 100644 --- a/ch9/ch9-03.html +++ b/ch9/ch9-03.html @@ -5,7 +5,7 @@ - sync.RWMutex讀寫鎖 | Go编程语言 + sync.RWMutex讀寫鎖 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-04.html b/ch9/ch9-04.html index 4b0a221..606226b 100644 --- a/ch9/ch9-04.html +++ b/ch9/ch9-04.html @@ -5,7 +5,7 @@ - 內存同步 | Go编程语言 + 內存同步 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-05.html b/ch9/ch9-05.html index 3ffd737..d9afbaf 100644 --- a/ch9/ch9-05.html +++ b/ch9/ch9-05.html @@ -5,7 +5,7 @@ - sync.Once初始化 | Go编程语言 + sync.Once初始化 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-06.html b/ch9/ch9-06.html index b8e96d7..f61bff7 100644 --- a/ch9/ch9-06.html +++ b/ch9/ch9-06.html @@ -5,7 +5,7 @@ - 競爭條件檢測 | Go编程语言 + 競爭條件檢測 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-07.html b/ch9/ch9-07.html index 1a049b7..0ea1311 100644 --- a/ch9/ch9-07.html +++ b/ch9/ch9-07.html @@ -5,7 +5,7 @@ - 示例: 併發的非阻塞緩存 | Go编程语言 + 示例: 併發的非阻塞緩存 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9-08.html b/ch9/ch9-08.html index 949c2ea..91f566a 100644 --- a/ch9/ch9-08.html +++ b/ch9/ch9-08.html @@ -5,7 +5,7 @@ - Goroutines和線程 | Go编程语言 + Goroutines和線程 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/ch9/ch9.html b/ch9/ch9.html index 216499d..abbf31d 100644 --- a/ch9/ch9.html +++ b/ch9/ch9.html @@ -5,7 +5,7 @@ - 基於共享變量的併發 | Go编程语言 + 基於共享變量的併發 | Go语言圣经 @@ -48,7 +48,7 @@ -
    +
    @@ -575,7 +575,7 @@ 4.2. - 切片 + Slice @@ -590,7 +590,7 @@ 4.3. - 字典 + Map @@ -2013,7 +2013,7 @@

    - Go编程语言 + Go语言圣经

    diff --git a/index.html b/index.html index cb4023a..3845d88 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ - 前言 | Go编程语言 + 前言 | Go语言圣经 @@ -46,7 +46,7 @@ -
    +
    @@ -573,7 +573,7 @@ 4.2. - 切片 + Slice @@ -588,7 +588,7 @@ 4.3. - 字典 + Map @@ -2011,7 +2011,7 @@

    - Go编程语言 + Go语言圣经

    @@ -2022,7 +2022,7 @@

    Go語言聖經(中文版)

    -

    Go語言聖經 《The Go Programming Language》 中文版本,僅供編程和英語學習交流之用,請在下載後24小時內刪除。

    +

    Go語言聖經 《The Go Programming Language》 中文版本,僅供學習交流之用。

    • 項目主頁:http://github.com/golang-china/gopl-zh
    • 項目進度:http://github.com/golang-china/gopl-zh/blob/master/progress.md
    • diff --git a/progress.md b/progress.md index 3aa5970..6256d89 100644 --- a/progress.md +++ b/progress.md @@ -27,11 +27,11 @@ - [x] 3.6 Constants - [x] Chapter 4: Composite Types - [x] 4.1 Arrays - - [ ] 4.2 Slices - - [ ] 4.3 Maps - - [ ] 4.4 Structs - - [ ] 4.5 JSON - - [ ] 4.6 Text and HTML Templates + - [x] 4.2 Slices + - [x] 4.3 Maps + - [x] 4.4 Structs + - [x] 4.5 JSON + - [x] 4.6 Text and HTML Templates - [ ] Chapter 5: Functions - [ ] 5.1 Function Declarations - [ ] 5.2 Recursion @@ -69,11 +69,11 @@ - [x] Chapter 8: Goroutines and Channels - [x] 8.1 Goroutines - [x] 8.2 Example: Concurrent Clock Server - - [ ] 8.3 Example: Concu rent Echo Server + - [x] 8.3 Example: Concu rent Echo Server - [ ] 8.4 Channels - [ ] 8.5 Looping in Parallel - [x] 8.6 Example: Concurrent Web Crawler - - [ ] 8.7 Multiplexing with select + - [x] 8.7 Multiplexing with select - [x] 8.8 Example: Concurrent Directory Traversal - [x] 8.9 Cancellation - [x] 8.10 Example: Chat Server From 7fd791b51a71ff5a93e056e1a23a3170987c8af6 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Thu, 31 Dec 2015 16:22:10 +0800 Subject: [PATCH 3/7] zz --- images/ch4-xx-01.png | Bin 0 -> 3387 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/ch4-xx-01.png diff --git a/images/ch4-xx-01.png b/images/ch4-xx-01.png new file mode 100644 index 0000000000000000000000000000000000000000..b588fa2e44c63add38cf1ab60e699890137330e7 GIT binary patch literal 3387 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 literal 0 HcmV?d00001 From 796c2eea518711478dd395865a8e9b911b8fdb72 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sat, 2 Jan 2016 16:04:45 +0800 Subject: [PATCH 4/7] rebuild --- CONTRIBUTORS.html | 16 +- ch0/ch0-01.html | 10 +- ch0/ch0-02.html | 10 +- ch0/ch0-03.html | 10 +- ch0/ch0-04.html | 10 +- ch0/ch0-05.html | 10 +- ch1/ch1-01.html | 10 +- ch1/ch1-02.html | 10 +- ch1/ch1-03.html | 10 +- ch1/ch1-04.html | 10 +- ch1/ch1-05.html | 10 +- ch1/ch1-06.html | 10 +- ch1/ch1-07.html | 10 +- ch1/ch1-08.html | 10 +- ch1/ch1.html | 10 +- ch10/ch10-01.html | 10 +- ch10/ch10-02.html | 10 +- ch10/ch10-03.html | 10 +- ch10/ch10-04.html | 10 +- ch10/ch10-05.html | 10 +- ch10/ch10-06.html | 10 +- ch10/ch10-07.html | 10 +- ch10/ch10.html | 10 +- ch11/ch11-01.html | 10 +- ch11/ch11-02.html | 10 +- ch11/ch11-03.html | 10 +- ch11/ch11-04.html | 10 +- ch11/ch11-05.html | 10 +- ch11/ch11-06.html | 10 +- ch11/ch11.html | 10 +- ch12/ch12-01.html | 10 +- ch12/ch12-02.html | 10 +- ch12/ch12-03.html | 186 ++- ch12/ch12-04.html | 133 +- ch12/ch12-05.html | 77 +- ch12/ch12-06.html | 145 +- ch12/ch12-07.html | 127 +- ch12/ch12-08.html | 45 +- ch12/ch12-09.html | 20 +- ch12/ch12.html | 10 +- ch13/ch13-01.html | 10 +- ch13/ch13-02.html | 10 +- ch13/ch13-03.html | 10 +- ch13/ch13-04.html | 10 +- ch13/ch13-05.html | 10 +- ch13/ch13.html | 10 +- ch2/ch2-01.html | 10 +- ch2/ch2-02.html | 10 +- ch2/ch2-03.html | 10 +- ch2/ch2-04.html | 10 +- ch2/ch2-05.html | 10 +- ch2/ch2-06.html | 10 +- ch2/ch2-07.html | 10 +- ch2/ch2.html | 10 +- ch3/ch3-01.html | 10 +- ch3/ch3-02.html | 10 +- ch3/ch3-03.html | 10 +- ch3/ch3-04.html | 10 +- ch3/ch3-05.html | 10 +- ch3/ch3-06.html | 10 +- ch3/ch3.html | 10 +- ch4/ch4-01.html | 10 +- ch4/ch4-02.html | 10 +- ch4/ch4-03.html | 10 +- ch4/ch4-04.html | 10 +- ch4/ch4-05.html | 10 +- ch4/ch4-06.html | 10 +- ch4/ch4.html | 10 +- ch5/ch5-01.html | 49 +- ch5/ch5-02.html | 10 +- ch5/ch5-03.html | 10 +- ch5/ch5-04.html | 10 +- ch5/ch5-05.html | 10 +- ch5/ch5-06.html | 10 +- ch5/ch5-07.html | 10 +- ch5/ch5-08.html | 10 +- ch5/ch5-09.html | 10 +- ch5/ch5-10.html | 10 +- ch5/ch5.html | 13 +- ch6/ch6-01.html | 10 +- ch6/ch6-02.html | 10 +- ch6/ch6-03.html | 10 +- ch6/ch6-04.html | 10 +- ch6/ch6-05.html | 10 +- ch6/ch6-06.html | 10 +- ch6/ch6.html | 10 +- ch7/ch7-01.html | 10 +- ch7/ch7-02.html | 10 +- ch7/ch7-03.html | 10 +- ch7/ch7-04.html | 10 +- ch7/ch7-05.html | 10 +- ch7/ch7-06.html | 10 +- ch7/ch7-07.html | 10 +- ch7/ch7-08.html | 10 +- ch7/ch7-09.html | 10 +- ch7/ch7-10.html | 10 +- ch7/ch7-11.html | 10 +- ch7/ch7-12.html | 10 +- ch7/ch7-13.html | 10 +- ch7/ch7-14.html | 10 +- ch7/ch7-15.html | 10 +- ch7/ch7.html | 10 +- ch8/ch8-01.html | 10 +- ch8/ch8-02.html | 10 +- ch8/ch8-03.html | 10 +- ch8/ch8-04.html | 10 +- ch8/ch8-05.html | 10 +- ch8/ch8-06.html | 10 +- ch8/ch8-07.html | 10 +- ch8/ch8-08.html | 10 +- ch8/ch8-09.html | 10 +- ch8/ch8-10.html | 10 +- ch8/ch8.html | 10 +- ch9/ch9-01.html | 10 +- ch9/ch9-02.html | 10 +- ch9/ch9-03.html | 25 +- ch9/ch9-04.html | 10 +- ch9/ch9-05.html | 10 +- ch9/ch9-06.html | 10 +- ch9/ch9-07.html | 10 +- ch9/ch9-08.html | 10 +- ch9/ch9.html | 13 +- gitbook/app.js | 3529 +++++++++++++++++++++++---------------------- gitbook/style.css | 4 +- index.html | 10 +- progress.md | 24 +- 126 files changed, 3484 insertions(+), 2032 deletions(-) diff --git a/CONTRIBUTORS.html b/CONTRIBUTORS.html index e47f49a..65bb27f 100644 --- a/CONTRIBUTORS.html +++ b/CONTRIBUTORS.html @@ -8,7 +8,7 @@ 附録 | Go语言圣经 - + @@ -46,7 +46,13 @@ -
      +
      @@ -2044,15 +2050,15 @@
    - + - + - +
    chai2010 <chaishushan@gmail.com>前言/第二章/第三章/第十章/第十一章/第十二章/第十三章前言/第二章/第三章/第四章/第十章/第十一章/第十二章/第十三章
    CrazySssst
    CrazySssst第三章(0節)第三章(0節)/第五章
    foreversmart <njutree@gmail.com>第七章(0節和1節)第七章(0節/1節/2節)
    Xargin <cao1988228@163.com>第一章/第六章/第八章第一章/第六章/第八章/第九章
    diff --git a/ch0/ch0-01.html b/ch0/ch0-01.html index bbe49d1..d21d4a2 100644 --- a/ch0/ch0-01.html +++ b/ch0/ch0-01.html @@ -8,7 +8,7 @@ Go語言起源 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch0/ch0-02.html b/ch0/ch0-02.html index c25984c..c78a3ce 100644 --- a/ch0/ch0-02.html +++ b/ch0/ch0-02.html @@ -8,7 +8,7 @@ Go語言項目 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch0/ch0-03.html b/ch0/ch0-03.html index 6fd6825..3c32b09 100644 --- a/ch0/ch0-03.html +++ b/ch0/ch0-03.html @@ -8,7 +8,7 @@ 本書的組織 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch0/ch0-04.html b/ch0/ch0-04.html index b81e885..6bb6bae 100644 --- a/ch0/ch0-04.html +++ b/ch0/ch0-04.html @@ -8,7 +8,7 @@ 更多的信息 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch0/ch0-05.html b/ch0/ch0-05.html index 0c88b29..46b37b2 100644 --- a/ch0/ch0-05.html +++ b/ch0/ch0-05.html @@ -8,7 +8,7 @@ 致謝 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-01.html b/ch1/ch1-01.html index be4b235..f5e2f22 100644 --- a/ch1/ch1-01.html +++ b/ch1/ch1-01.html @@ -8,7 +8,7 @@ Hello, World | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-02.html b/ch1/ch1-02.html index 0689ca4..a9f707c 100644 --- a/ch1/ch1-02.html +++ b/ch1/ch1-02.html @@ -8,7 +8,7 @@ 命令行參數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-03.html b/ch1/ch1-03.html index fede755..ead7834 100644 --- a/ch1/ch1-03.html +++ b/ch1/ch1-03.html @@ -8,7 +8,7 @@ 査找重複的行 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-04.html b/ch1/ch1-04.html index 20abc86..83d6e11 100644 --- a/ch1/ch1-04.html +++ b/ch1/ch1-04.html @@ -8,7 +8,7 @@ GIF動畵 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-05.html b/ch1/ch1-05.html index a3a94f6..5c74854 100644 --- a/ch1/ch1-05.html +++ b/ch1/ch1-05.html @@ -8,7 +8,7 @@ 獲取URL | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-06.html b/ch1/ch1-06.html index a534ea5..5ef9d67 100644 --- a/ch1/ch1-06.html +++ b/ch1/ch1-06.html @@ -8,7 +8,7 @@ 併發獲取多個URL | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-07.html b/ch1/ch1-07.html index 1fa5aca..48ca8dc 100644 --- a/ch1/ch1-07.html +++ b/ch1/ch1-07.html @@ -8,7 +8,7 @@ Web服務 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1-08.html b/ch1/ch1-08.html index 7bb4b23..66b0aa6 100644 --- a/ch1/ch1-08.html +++ b/ch1/ch1-08.html @@ -8,7 +8,7 @@ 本章要點 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch1/ch1.html b/ch1/ch1.html index dde6ced..387d6a5 100644 --- a/ch1/ch1.html +++ b/ch1/ch1.html @@ -8,7 +8,7 @@ 入門 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-01.html b/ch10/ch10-01.html index 081e0d4..6cd7d2a 100644 --- a/ch10/ch10-01.html +++ b/ch10/ch10-01.html @@ -8,7 +8,7 @@ 簡介 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-02.html b/ch10/ch10-02.html index 4be6cf0..205ace1 100644 --- a/ch10/ch10-02.html +++ b/ch10/ch10-02.html @@ -8,7 +8,7 @@ 導入路徑 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-03.html b/ch10/ch10-03.html index 4134b06..296bcff 100644 --- a/ch10/ch10-03.html +++ b/ch10/ch10-03.html @@ -8,7 +8,7 @@ 包聲明 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-04.html b/ch10/ch10-04.html index a9b5934..71cfc7b 100644 --- a/ch10/ch10-04.html +++ b/ch10/ch10-04.html @@ -8,7 +8,7 @@ 導入聲明 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-05.html b/ch10/ch10-05.html index e5a32c2..9bfe42b 100644 --- a/ch10/ch10-05.html +++ b/ch10/ch10-05.html @@ -8,7 +8,7 @@ 匿名導入 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-06.html b/ch10/ch10-06.html index a34be03..d01f359 100644 --- a/ch10/ch10-06.html +++ b/ch10/ch10-06.html @@ -8,7 +8,7 @@ 包和命名 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10-07.html b/ch10/ch10-07.html index a000ab6..9b08d3c 100644 --- a/ch10/ch10-07.html +++ b/ch10/ch10-07.html @@ -8,7 +8,7 @@ 工具 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch10/ch10.html b/ch10/ch10.html index 6aaf6d9..ec42f24 100644 --- a/ch10/ch10.html +++ b/ch10/ch10.html @@ -8,7 +8,7 @@ 包和工具 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-01.html b/ch11/ch11-01.html index cce5e5b..f9a78ac 100644 --- a/ch11/ch11-01.html +++ b/ch11/ch11-01.html @@ -8,7 +8,7 @@ go test | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-02.html b/ch11/ch11-02.html index 868cc41..8fa148b 100644 --- a/ch11/ch11-02.html +++ b/ch11/ch11-02.html @@ -8,7 +8,7 @@ 測試函數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-03.html b/ch11/ch11-03.html index 22647fd..0837e53 100644 --- a/ch11/ch11-03.html +++ b/ch11/ch11-03.html @@ -8,7 +8,7 @@ 測試覆蓋率 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-04.html b/ch11/ch11-04.html index fe76ddd..b99a824 100644 --- a/ch11/ch11-04.html +++ b/ch11/ch11-04.html @@ -8,7 +8,7 @@ 基準測試 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-05.html b/ch11/ch11-05.html index fb93f55..153a442 100644 --- a/ch11/ch11-05.html +++ b/ch11/ch11-05.html @@ -8,7 +8,7 @@ 剖析 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11-06.html b/ch11/ch11-06.html index 408f36d..81db1c7 100644 --- a/ch11/ch11-06.html +++ b/ch11/ch11-06.html @@ -8,7 +8,7 @@ 示例函數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch11/ch11.html b/ch11/ch11.html index c3cca12..41b0caf 100644 --- a/ch11/ch11.html +++ b/ch11/ch11.html @@ -8,7 +8,7 @@ 測試 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch12/ch12-01.html b/ch12/ch12-01.html index 8c13e7a..fb199d4 100644 --- a/ch12/ch12-01.html +++ b/ch12/ch12-01.html @@ -8,7 +8,7 @@ 爲何需要反射? | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch12/ch12-02.html b/ch12/ch12-02.html index fc5203b..a107d1e 100644 --- a/ch12/ch12-02.html +++ b/ch12/ch12-02.html @@ -8,7 +8,7 @@ reflect.Type和reflect.Value | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch12/ch12-03.html b/ch12/ch12-03.html index 4845fc5..fbe4270 100644 --- a/ch12/ch12-03.html +++ b/ch12/ch12-03.html @@ -8,7 +8,7 @@ Display遞歸打印 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,181 @@

    12.3. Display遞歸打印

    -

    TODO

    +

    接下來,讓我們看看如何改善聚合數據類型的顯示。我們併不想完全剋隆一個fmt.Sprint函數,我們隻是像構建一個用於調式用的Display函數,給定一個聚合類型x,打印這個值對應的完整的結構,同時記録每個發現的每個元素的路徑。讓我們從一個例子開始。

    +
    e, _ := eval.Parse("sqrt(A / pi)")
    +Display("e", e)
    +
    +

    在上面的調用中,傳入Display函數的參數是在7.9節一個表達式求值函數返迴的語法樹。Display函數的輸出如下:

    +
    Display e (eval.call):
    +e.fn = "sqrt"
    +e.args[0].type = eval.binary
    +e.args[0].value.op = 47
    +e.args[0].value.x.type = eval.Var
    +e.args[0].value.x.value = "A"
    +e.args[0].value.y.type = eval.Var
    +e.args[0].value.y.value = "pi"
    +
    +

    在可能的情況下,你應該避免在一個包中暴露和反射相關的接口。我們將定義一個未導出的display函數用於遞歸處理工作,導出的是Display函數,它隻是display函數簡單的包裝以接受interface{}類型的參數:

    +
    gopl.io/ch12/display
    +
    +func Display(name string, x interface{}) {
    +    fmt.Printf("Display %s (%T):\n", name, x)
    +    display(name, reflect.ValueOf(x))
    +}
    +
    +

    在display函數中,我們使用了前面定義的打印基礎類型——基本類型、函數和chan等——元素值的formatAtom函數,但是我們會使用reflect.Value的方法來遞歸顯示聚合類型的每一個成員或元素。在遞歸下降過程中,path字符串,從最開始傳入的起始值(這里是“e”),將逐步增長以表示如何達到當前值(例如“e.args[0].value”)。

    +

    因爲我們不再模擬fmt.Sprint函數,我們將直接使用fmt包來簡化我們的例子實現。

    +
    func display(path string, v reflect.Value) {
    +    switch v.Kind() {
    +    case reflect.Invalid:
    +        fmt.Printf("%s = invalid\n", path)
    +    case reflect.Slice, reflect.Array:
    +        for i := 0; i < v.Len(); i++ {
    +            display(fmt.Sprintf("%s[%d]", path, i), v.Index(i))
    +        }
    +    case reflect.Struct:
    +        for i := 0; i < v.NumField(); i++ {
    +            fieldPath := fmt.Sprintf("%s.%s", path, v.Type().Field(i).Name)
    +            display(fieldPath, v.Field(i))
    +        }
    +    case reflect.Map:
    +        for _, key := range v.MapKeys() {
    +            display(fmt.Sprintf("%s[%s]", path,
    +                formatAtom(key)), v.MapIndex(key))
    +        }
    +    case reflect.Ptr:
    +        if v.IsNil() {
    +            fmt.Printf("%s = nil\n", path)
    +        } else {
    +            display(fmt.Sprintf("(*%s)", path), v.Elem())
    +        }
    +    case reflect.Interface:
    +        if v.IsNil() {
    +            fmt.Printf("%s = nil\n", path)
    +        } else {
    +            fmt.Printf("%s.type = %s\n", path, v.Elem().Type())
    +            display(path+".value", v.Elem())
    +        }
    +    default: // basic types, channels, funcs
    +        fmt.Printf("%s = %s\n", path, formatAtom(v))
    +    }
    +}
    +
    +

    讓我們針對不同類型分别討論。

    +

    Slice和數組: 兩種的處理邏輯是一樣的。Len方法返迴slice或數組值中的元素個數,Index(i)活動索引i對應的元素,返迴的也是一個reflect.Value類型的值;如果索引i超出范圍的話將導致panic異常,這些行爲和數組或slice類型內建的len(a)和a[i]等操作類似。display針對序列中的每個元素遞歸調用自身處理,我們通過在遞歸處理時向path附加“[i]”來表示訪問路徑。

    +

    雖然reflect.Value類型帶有很多方法,但是隻有少數的方法對任意值都是可以安全調用的。例如,Index方法隻能對Slice、數組或字符串類型的值調用,其它類型如果調用將導致panic異常。

    +

    結構體: NumField方法報告結構體中成員的數量,Field(i)以reflect.Value類型返迴第i個成員的值。成員列表包含了匿名成員在內的全部成員。通過在path添加“.f”來表示成員路徑,我們必鬚獲得結構體對應的reflect.Type類型信息,包含結構體類型和第i個成員的名字。

    +

    Maps: MapKeys方法返迴一個reflect.Value類型的slice,每一個都對應map的可以。和往常一樣,遍歷map時順序是隨機的。MapIndex(key)返迴map中key對應的value。我們向path添加“[key]”來表示訪問路徑。(我們這里有一個未完成的工作。其實map的key的類型併不局限於formatAtom能完美處理的類型;數組、結構體和接口都可以作爲map的key。針對這種類型,完善key的顯示信息是練習12.1的任務。)

    +

    指針: Elem方法返迴指針指向的變量,還是reflect.Value類型。技術指針是nil,這個操作也是安全的,在這種情況下指針是Invalid無效類型,但是我們可以用IsNil方法來顯式地測試一個空指針,這樣我們可以打印更合適的信息。我們在path前面添加“*”,併用括弧包含以避免歧義。

    +

    接口: 再一次,我們使用IsNil方法來測試接口是否是nil,如果不是,我們可以調用v.Elem()來獲取接口對應的動態值,併且打印對應的類型和值。

    +

    現在我們的Display函數總算完工了,讓我們看看它的表現吧。下面的Movie類型是在4.5節的電影類型上演變來的:

    +
    type Movie struct {
    +    Title, Subtitle string
    +    Year            int
    +    Color           bool
    +    Actor           map[string]string
    +    Oscars          []string
    +    Sequel          *string
    +}
    +
    +

    讓我們聲明一個該類型的變量,然後看看Display函數如何顯示它:

    +
    strangelove := Movie{
    +    Title:    "Dr. Strangelove",
    +    Subtitle: "How I Learned to Stop Worrying and Love the Bomb",
    +    Year:     1964,
    +    Color:    false,
    +    Actor: map[string]string{
    +        "Dr. Strangelove":            "Peter Sellers",
    +        "Grp. Capt. Lionel Mandrake": "Peter Sellers",
    +        "Pres. Merkin Muffley":       "Peter Sellers",
    +        "Gen. Buck Turgidson":        "George C. Scott",
    +        "Brig. Gen. Jack D. Ripper":  "Sterling Hayden",
    +        `Maj. T.J. "King" Kong`:      "Slim Pickens",
    +    },
    +
    +    Oscars: []string{
    +        "Best Actor (Nomin.)",
    +        "Best Adapted Screenplay (Nomin.)",
    +        "Best Director (Nomin.)",
    +        "Best Picture (Nomin.)",
    +    },
    +}
    +
    +

    Display("strangelove", strangelove)調用將顯示(strangelove電影對應的中文名是《奇愛博士》):

    +
    Display strangelove (display.Movie):
    +strangelove.Title = "Dr. Strangelove"
    +strangelove.Subtitle = "How I Learned to Stop Worrying and Love the Bomb"
    +strangelove.Year = 1964
    +strangelove.Color = false
    +strangelove.Actor["Gen. Buck Turgidson"] = "George C. Scott"
    +strangelove.Actor["Brig. Gen. Jack D. Ripper"] = "Sterling Hayden"
    +strangelove.Actor["Maj. T.J. \"King\" Kong"] = "Slim Pickens"
    +strangelove.Actor["Dr. Strangelove"] = "Peter Sellers"
    +strangelove.Actor["Grp. Capt. Lionel Mandrake"] = "Peter Sellers"
    +strangelove.Actor["Pres. Merkin Muffley"] = "Peter Sellers"
    +strangelove.Oscars[0] = "Best Actor (Nomin.)"
    +strangelove.Oscars[1] = "Best Adapted Screenplay (Nomin.)"
    +strangelove.Oscars[2] = "Best Director (Nomin.)"
    +strangelove.Oscars[3] = "Best Picture (Nomin.)"
    +strangelove.Sequel = nil
    +
    +

    我們也可以使用Display函數來顯示標準庫中類型的內部結構,例如*os.File類型:

    +
    Display("os.Stderr", os.Stderr)
    +// Output:
    +// Display os.Stderr (*os.File):
    +// (*(*os.Stderr).file).fd = 2
    +// (*(*os.Stderr).file).name = "/dev/stderr"
    +// (*(*os.Stderr).file).nepipe = 0
    +
    +

    要註意的是,結構體中未導出的成員對反射也是可見的。需要當心的是這個例子的輸出在不同操作繫統上可能是不同的,併且隨着標準庫的發展也可能導致結果不同。(這也是將這些成員定義爲私有成員的原因之一!)我們深圳可以用Display函數來顯示reflect.Value,來査看*os.File類型的內部表示方式。Display("rV", reflect.ValueOf(os.Stderr))調用的輸出如下,當然不同環境得到的結果可能有差異:

    +
    Display rV (reflect.Value):
    +(*rV.typ).size = 8
    +(*rV.typ).hash = 871609668
    +(*rV.typ).align = 8
    +(*rV.typ).fieldAlign = 8
    +(*rV.typ).kind = 22
    +(*(*rV.typ).string) = "*os.File"
    +
    +(*(*(*rV.typ).uncommonType).methods[0].name) = "Chdir"
    +(*(*(*(*rV.typ).uncommonType).methods[0].mtyp).string) = "func() error"
    +(*(*(*(*rV.typ).uncommonType).methods[0].typ).string) = "func(*os.File) error"
    +...
    +
    +

    觀察下面兩個例子的區别:

    +
    var i interface{} = 3
    +
    +Display("i", i)
    +// Output:
    +// Display i (int):
    +// i = 3
    +
    +Display("&i", &i)
    +// Output:
    +// Display &i (*interface {}):
    +// (*&i).type = int
    +// (*&i).value = 3
    +
    +

    在第一個例子中,Display函數將調用reflect.ValueOf(i),它返迴一個Int類型的值。正如我們在12.2節中提到的,reflect.ValueOf總是返迴一個值的具體類型,因爲它是從一個接口值提取的內容。

    +

    在第二個例子中,Display函數調用的是reflect.ValueOf(&i),它返迴一個指向i的指針,對應Ptr類型。在switch的Ptr分支中,通過調用Elem來返迴這個值,返迴一個Value來表示i,對應Interface類型。一個間接獲得的Value,就像這一個,可能代表任意類型的值,包括接口類型。內部的display函數遞歸調用自身,這次它將打印接口的動態類型和值。

    +

    目前的實現,Display如果顯示一個帶環的數據結構將會陷入死循環,例如首位項鏈的鏈表:

    +
    // a struct that points to itself
    +type Cycle struct{ Value int; Tail *Cycle }
    +var c Cycle
    +c = Cycle{42, &c}
    +Display("c", c)
    +
    +

    Display會永遠不停地進行深度遞歸打印:

    +
    Display c (display.Cycle):
    +c.Value = 42
    +(*c.Tail).Value = 42
    +(*(*c.Tail).Tail).Value = 42
    +(*(*(*c.Tail).Tail).Tail).Value = 42
    +...ad infinitum...
    +
    +

    許多Go語言程序都包含了一些循環的數據結果。Display支持這類帶環的數據結構是比較棘手的,需要增加一個額外的記録訪問的路徑;代價是昂貴的。一般的解決方案是采用不安全的語言特性,我們將在13.3節看到具體的解決方案。

    +

    帶環的數據結構很少會對fmt.Sprint函數造成問題,因爲它很少嚐試打印完整的數據結構。例如,當它遇到一個指針的時候,它隻是簡單第打印指針的數值。雖然,在打印包含自身的slice或map時可能遇到睏難,但是不保證處理這種是罕見情況卻可以避免額外的麻煩。

    +

    練習 12.1: 擴展Displayhans,以便它可以顯示包含以結構體或數組作爲map的key類型的值。

    +

    練習 12.2: 增強display函數的穩健性,通過記録邊界的步數來確保在超出一定限製前放棄遞歸。(在13.3節,我們會看到另一種探測數據結構是否存在環的技術。)

    diff --git a/ch12/ch12-04.html b/ch12/ch12-04.html index 8504cdc..5bfcdc2 100644 --- a/ch12/ch12-04.html +++ b/ch12/ch12-04.html @@ -8,7 +8,7 @@ 示例: 編碼S表達式 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,128 @@

    12.4. 示例: 編碼S表達式

    -

    TODO

    +

    Display是一個用於顯示結構化數據的調試工具,但是它併不能將任意的Go語言對象編碼爲通用消息然後用於進程間通信。

    +

    正如我們在4.5節中中看到的,Go語言的標準庫支持了包括JSON、XML和ASN.1等多種編碼格式。還有另一種依然被廣泛使用的格式是S表達式格式,采用類似Lisp語言的語法。但是和其他編碼格式不同的是,Go語言自帶的標準庫併不支持S表達式,主要是因爲它沒有一個公認的標準規范。

    +

    在本節中,我們將定義一個包用於將Go語言的對象編碼爲S表達式格式,它支持以下結構:

    +
    42          integer
    +"hello"     string (with Go-style quotation)
    +foo         symbol (an unquoted name)
    +(1 2 3)     list   (zero or more items enclosed in parentheses)
    +

    布爾型習慣上使用t符號表示true,空列表或nil符號表示false,但是爲了簡單起見,我們暫時忽略布爾類型。同時忽略的還有chan管道和函數,因爲通過反射併無法知道它們的確切狀態。我們忽略的還浮點數、複數和interface。支持它們是練習12.3的任務。

    +

    我們將Go語言的類型編碼爲S表達式的方法如下。整數和字符串以自然的方式編碼。Nil值編碼爲nil符號。數組和slice被編碼爲一個列表。

    +

    結構體被編碼爲成員對象的列表,每個成員對象對應一個個僅有兩個元素的子列表,其中子列表的第一個元素是成員的名字,子列表的第二個元素是成員的值。Map被編碼爲鍵值對的列表。傳統上,S表達式使用點狀符號列表(key . value)結構來表示key/value對,而不是用一個含雙元素的列表,不過爲了簡單我們忽略了點狀符號列表。

    +

    編碼是由一個encode遞歸函數完成,如下所示。它的結構本質上和前面的Display函數類似:

    +
    gopl.io/ch12/sexpr
    +
    +func encode(buf *bytes.Buffer, v reflect.Value) error {
    +    switch v.Kind() {
    +    case reflect.Invalid:
    +        buf.WriteString("nil")
    +
    +    case reflect.Int, reflect.Int8, reflect.Int16,
    +        reflect.Int32, reflect.Int64:
    +        fmt.Fprintf(buf, "%d", v.Int())
    +
    +    case reflect.Uint, reflect.Uint8, reflect.Uint16,
    +        reflect.Uint32, reflect.Uint64, reflect.Uintptr:
    +        fmt.Fprintf(buf, "%d", v.Uint())
    +
    +    case reflect.String:
    +        fmt.Fprintf(buf, "%q", v.String())
    +
    +    case reflect.Ptr:
    +        return encode(buf, v.Elem())
    +
    +    case reflect.Array, reflect.Slice: // (value ...)
    +        buf.WriteByte('(')
    +        for i := 0; i < v.Len(); i++ {
    +            if i > 0 {
    +                buf.WriteByte(' ')
    +            }
    +            if err := encode(buf, v.Index(i)); err != nil {
    +                return err
    +            }
    +        }
    +        buf.WriteByte(')')
    +
    +    case reflect.Struct: // ((name value) ...)
    +        buf.WriteByte('(')
    +        for i := 0; i < v.NumField(); i++ {
    +            if i > 0 {
    +                buf.WriteByte(' ')
    +            }
    +            fmt.Fprintf(buf, "(%s ", v.Type().Field(i).Name)
    +            if err := encode(buf, v.Field(i)); err != nil {
    +                return err
    +            }
    +            buf.WriteByte(')')
    +        }
    +        buf.WriteByte(')')
    +
    +    case reflect.Map: // ((key value) ...)
    +        buf.WriteByte('(')
    +        for i, key := range v.MapKeys() {
    +            if i > 0 {
    +                buf.WriteByte(' ')
    +            }
    +            buf.WriteByte('(')
    +            if err := encode(buf, key); err != nil {
    +                return err
    +            }
    +            buf.WriteByte(' ')
    +            if err := encode(buf, v.MapIndex(key)); err != nil {
    +                return err
    +            }
    +            buf.WriteByte(')')
    +        }
    +        buf.WriteByte(')')
    +
    +    default: // float, complex, bool, chan, func, interface
    +        return fmt.Errorf("unsupported type: %s", v.Type())
    +    }
    +    return nil
    +}
    +
    +

    Marshal函數是對encode的保證,以保持和encoding/...下其它包有着相似的API:

    +
    // Marshal encodes a Go value in S-expression form.
    +func Marshal(v interface{}) ([]byte, error) {
    +    var buf bytes.Buffer
    +    if err := encode(&buf, reflect.ValueOf(v)); err != nil {
    +        return nil, err
    +    }
    +    return buf.Bytes(), nil
    +}
    +
    +

    下面是Marshal對12.3節的strangelove變量編碼後的結果:

    +
    ((Title "Dr. Strangelove") (Subtitle "How I Learned to Stop Worrying and Lo
    +ve the Bomb") (Year 1964) (Actor (("Grp. Capt. Lionel Mandrake" "Peter Sell
    +ers") ("Pres. Merkin Muffley" "Peter Sellers") ("Gen. Buck Turgidson" "Geor
    +ge C. Scott") ("Brig. Gen. Jack D. Ripper" "Sterling Hayden") ("Maj. T.J. \
    +"King\" Kong" "Slim Pickens") ("Dr. Strangelove" "Peter Sellers"))) (Oscars
    +("Best Actor (Nomin.)" "Best Adapted Screenplay (Nomin.)" "Best Director (N
    +omin.)" "Best Picture (Nomin.)")) (Sequel nil))
    +

    整個輸出編碼爲一行中以減少輸出的大小,但是也很難閲讀。這里有一個對S表達式格式化的約定。編寫一個S表達式的格式化函數將作爲一個具有挑戰性的練習任務;不過 http://gopl.io 也提供了一個簡單的版本。

    +
    ((Title "Dr. Strangelove")
    + (Subtitle "How I Learned to Stop Worrying and Love the Bomb")
    + (Year 1964)
    + (Actor (("Grp. Capt. Lionel Mandrake" "Peter Sellers")
    +         ("Pres. Merkin Muffley" "Peter Sellers")
    +         ("Gen. Buck Turgidson" "George C. Scott")
    +         ("Brig. Gen. Jack D. Ripper" "Sterling Hayden")
    +         ("Maj. T.J. \"King\" Kong" "Slim Pickens")
    +         ("Dr. Strangelove" "Peter Sellers")))
    + (Oscars ("Best Actor (Nomin.)"
    +          "Best Adapted Screenplay (Nomin.)"
    +          "Best Director (Nomin.)"
    +          "Best Picture (Nomin.)"))
    + (Sequel nil))
    +

    和fmt.Print、json.Marshal、Display函數類似,sexpr.Marshal函數處理帶環的數據結構也會陷入死循環。

    +

    在12.6節中,我們將給出S表達式解碼器的實現步驟,但是在那之前,我們還需要先了解如果通過反射技術來更新程序的變量。

    +

    練習 12.3: 實現encode函數缺少的分支。將布爾類型編碼爲t和nil,浮點數編碼爲Go語言的格式,複數1+2i編碼爲#C(1.0 2.0)格式。接口編碼爲類型名和值對,例如("[]int" (1 2 3)),但是這個形式可能會造成歧義:reflect.Type.String方法對於不同的類型可能返迴相同的結果。

    +

    練習 12.4: 脩改encode函數,以上面的格式化形式輸出S表達式。

    +

    練習 12.5: 脩改encode函數,用JSON格式代替S表達式格式。然後使用標準庫提供的json.Unmarshal解碼器來驗證函數是正確的。

    +

    練習 12.6: 脩改encode,作爲一個優化,忽略對是零值對象的編碼。

    +

    練習 12.7: 創建一個基於流式的API,用於S表達式的解碼,和json.Decoder(§4.5)函數功能類似。

    diff --git a/ch12/ch12-05.html b/ch12/ch12-05.html index c415762..a20695f 100644 --- a/ch12/ch12-05.html +++ b/ch12/ch12-05.html @@ -8,7 +8,7 @@ 通過reflect.Value脩改值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,72 @@

    12.5. 通過reflect.Value脩改值

    -

    TODO

    +

    到目前爲止,反射還隻是程序中變量的另一種訪問方式。然而,在本節中我們將重點討論如果通過反射機製來脩改變量。

    +

    迴想一下,Go語言中類似x、x.f[1]和*p形式的表達式都可以表示變量,但是其它如x + 1和f(2)則不是變量。一個變量就是一個可尋址的內存空間,里面存儲了一個值,併且存儲的值可以通過內存地址來更新。

    +

    對於reflect.Values也有類似的區别。有一些reflect.Values是可取地址的;其它一些則不可以。考慮以下的聲明語句:

    +
    x := 2                   // value   type    variable?
    +a := reflect.ValueOf(2)  // 2       int     no
    +b := reflect.ValueOf(x)  // 2       int     no
    +c := reflect.ValueOf(&x) // &x      *int    no
    +d := c.Elem()            // 2       int     yes (x)
    +
    +

    其中a對應的變量則不可取地址。因爲a中的值僅僅是整數2的拷貝副本。b中的值也同樣不可取地址。c中的值還是不可取地址,它隻是一個指針&x的拷貝。實際上,所有通過reflect.ValueOf(x)返迴的reflect.Value都是不可取地址的。但是對於d,它是c的解引用方式生成的,指向另一個變量,因此是可取地址的。我們可以通過調用reflect.ValueOf(&x).Elem(),來獲取任意變量x對應的可取地址的Value。

    +

    我們可以通過調用reflect.Value的CanAddr方法來判斷其是否可以被取地址:

    +
    fmt.Println(a.CanAddr()) // "false"
    +fmt.Println(b.CanAddr()) // "false"
    +fmt.Println(c.CanAddr()) // "false"
    +fmt.Println(d.CanAddr()) // "true"
    +
    +

    每當我們通過指針間接地獲取的reflect.Value都是可取地址的,卽使開始的是一個不可取地址的Value。在反射機製中,所有關於是否支持取地址的規則都是類似的。例如,slice的索引表達式e[i]將隱式地包含一個指針,它就是可取地址的,卽使開始的e表達式不支持也沒有關繫。以此類推,reflect.ValueOf(e).Index(i)對於的值也是可取地址的,卽使原始的reflect.ValueOf(e)不支持也沒有關繫。

    +

    要從變量對應的可取地址的reflect.Value來訪問變量需要三個步驟。第一步是調用Addr()方法,它返迴一個Value,里面保存了指向變量的指針。然後是在Value上調用Interface()方法,也就是返迴一個interface{},里面通用包含指向變量的指針。最後,如果我們知道變量的類型,我們可以使用類型的斷言機製將得到的interface{}類型的接口強製環爲普通的類型指針。這樣我們就可以通過這個普通指針來更新變量了:

    +
    x := 2
    +d := reflect.ValueOf(&x).Elem()   // d refers to the variable x
    +px := d.Addr().Interface().(*int) // px := &x
    +*px = 3                           // x = 3
    +fmt.Println(x)                    // "3"
    +
    +

    或者,不使用指針,而是通過調用可取地址的reflect.Value的reflect.Value.Set方法來更新對於的值:

    +
    d.Set(reflect.ValueOf(4))
    +fmt.Println(x) // "4"
    +
    +

    Set方法將在運行時執行和編譯時類似的可賦值性約束的檢査。以上代碼,變量和值都是int類型,但是如果變量是int64類型,那麽程序將拋出一個panic異常,所以關鍵問題是要確保改類型的變量可以接受對應的值:

    +
    d.Set(reflect.ValueOf(int64(5))) // panic: int64 is not assignable to int
    +
    +

    通用對一個不可取地址的reflect.Value調用Set方法也會導致panic異常:

    +
    x := 2
    +b := reflect.ValueOf(x)
    +b.Set(reflect.ValueOf(3)) // panic: Set using unaddressable value
    +
    +

    這里有很多用於基本數據類型的Set方法:SetInt、SetUint、SetString和SetFloat等。

    +
    d := reflect.ValueOf(&x).Elem()
    +d.SetInt(3)
    +fmt.Println(x) // "3"
    +
    +

    從某種程度上説,這些Set方法總是盡可能地完成任務。以SetInt爲例,隻要變量是某種類型的有符號整數就可以工作,卽使是一些命名的類型,隻要底層數據類型是有符號整數就可以,而且如果對於變量類型值太大的話會被自動截斷。但需要謹慎的是:對於一個引用interface{}類型的reflect.Value調用SetInt會導致panic異常,卽使那個interface{}變量對於整數類型也不行。

    +
    x := 1
    +rx := reflect.ValueOf(&x).Elem()
    +rx.SetInt(2)                     // OK, x = 2
    +rx.Set(reflect.ValueOf(3))       // OK, x = 3
    +rx.SetString("hello")            // panic: string is not assignable to int
    +rx.Set(reflect.ValueOf("hello")) // panic: string is not assignable to int
    +
    +var y interface{}
    +ry := reflect.ValueOf(&y).Elem()
    +ry.SetInt(2)                     // panic: SetInt called on interface Value
    +ry.Set(reflect.ValueOf(3))       // OK, y = int(3)
    +ry.SetString("hello")            // panic: SetString called on interface Value
    +ry.Set(reflect.ValueOf("hello")) // OK, y = "hello"
    +
    +

    當我們用Display顯示os.Stdout結構時,我們發現反射可以越過Go語言的導出規則的限製讀取結構體中未導出的成員,比如在類Unix繫統上os.File結構體中的fd int成員。然而,利用反射機製併不能脩改這些未導出的成員:

    +
    stdout := reflect.ValueOf(os.Stdout).Elem() // *os.Stdout, an os.File var
    +fmt.Println(stdout.Type())                  // "os.File"
    +fd := stdout.FieldByName("fd")
    +fmt.Println(fd.Int()) // "1"
    +fd.SetInt(2)          // panic: unexported field
    +
    +

    一個可取地址的reflect.Value會記録一個結構體成員是否是未導出成員,如果是的話則拒絶脩改操作。因此,CanAddr方法併不能正確反映一個變量是否是可以被脩改的。另一個相關的方法CanSet是用於檢査對應的reflect.Value是否是可取地址併可被脩改的:

    +
    fmt.Println(fd.CanAddr(), fd.CanSet()) // "true false"
    +
    diff --git a/ch12/ch12-06.html b/ch12/ch12-06.html index 18b6d07..b0d6208 100644 --- a/ch12/ch12-06.html +++ b/ch12/ch12-06.html @@ -8,7 +8,7 @@ 示例: 解碼S表達式 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,140 @@

    12.6. 示例: 解碼S表達式

    -

    TODO

    +

    標準庫中encoding/...下每個包中提供的Marshal編碼函數都有一個對應的Unmarshal函數用於解碼。例如,我們在4.5節中看到的,要將包含JSON編碼格式的字節slice數據解碼爲我們自己的Movie類型(§12.3),我們可以這樣做:

    +
    data := []byte{/* ... */}
    +var movie Movie
    +err := json.Unmarshal(data, &movie)
    +
    +

    Unmarshal函數使用了反射機製類脩改movie變量的每個成員,根據輸入的內容爲Movie成員創建對應的map、結構體和slice。

    +

    現在讓我們爲S表達式編碼實現一個簡易的Unmarshal,類似於前面的json.Unmarshal標準庫函數,對應我們之前實現的sexpr.Marshal函數的逆操作。我們必鬚提醒一下,一個健壯的和通用的實現通常需要比例子更多的代碼,爲了便於演示我們采用了精簡的實現。我們隻支持S表達式有限的子集,同時處理錯誤的方式也比較粗暴,代碼的目的是爲了演示反射的用法,而不是構造一個實用的S表達式的解碼器。

    +

    詞法分析器lexer使用了標準庫中的text/scanner包將輸入流的字節數據解析爲一個個類似註釋、標識符、字符串面值和數字面值之類的標記。輸入掃描器scanner的Scan方法將提前掃描和返迴下一個記號,對於rune類型。大多數記號,比如“(”,對應一個單一rune可表示的Unicode字符,但是text/scanner也可以用小的負數表示記號標識符、字符串等由多個字符組成的記號。調用Scan方法將返迴這些記號的類型,接着調用TokenText方法將返迴記號對應的文本內容。

    +

    因爲每個解析器可能需要多次使用當前的記號,但是Scan會一直向前掃描,所有我們包裝了一個lexer掃描器輔助類型,用於跟蹤最近由Scan方法返迴的記號。

    +
    gopl.io/ch12/sexpr
    +
    +type lexer struct {
    +    scan  scanner.Scanner
    +    token rune // the current token
    +}
    +
    +func (lex *lexer) next()        { lex.token = lex.scan.Scan() }
    +func (lex *lexer) text() string { return lex.scan.TokenText() }
    +
    +func (lex *lexer) consume(want rune) {
    +    if lex.token != want { // NOTE: Not an example of good error handling.
    +        panic(fmt.Sprintf("got %q, want %q", lex.text(), want))
    +    }
    +    lex.next()
    +}
    +
    +

    現在讓我們轉到語法解析器。它主要包含兩個功能。第一個是read函數,用於讀取S表達式的當前標記,然後根據S表達式的當前標記更新可取地址的reflect.Value對應的變量v。

    +
    func read(lex *lexer, v reflect.Value) {
    +    switch lex.token {
    +    case scanner.Ident:
    +        // The only valid identifiers are
    +        // "nil" and struct field names.
    +        if lex.text() == "nil" {
    +            v.Set(reflect.Zero(v.Type()))
    +            lex.next()
    +            return
    +        }
    +    case scanner.String:
    +        s, _ := strconv.Unquote(lex.text()) // NOTE: ignoring errors
    +        v.SetString(s)
    +        lex.next()
    +        return
    +    case scanner.Int:
    +        i, _ := strconv.Atoi(lex.text()) // NOTE: ignoring errors
    +        v.SetInt(int64(i))
    +        lex.next()
    +        return
    +    case '(':
    +        lex.next()
    +        readList(lex, v)
    +        lex.next() // consume ')'
    +        return
    +    }
    +    panic(fmt.Sprintf("unexpected token %q", lex.text()))
    +}
    +
    +

    我們的S表達式使用標識符區分兩個不同類型,結構體成員名和nil值的指針。read函數值處理nil類型的標識符。當遇到scanner.Ident爲“nil”是,使用reflect.Zero函數將變量v設置爲零值。而其它任何類型的標識符,我們都作爲錯誤處理。後面的readList函數將處理結構體的成員名。

    +

    一個“(”標記對應一個列表的開始。第二個函數readList,將一個列表解碼到一個聚合類型中(map、結構體、slice或數組),具體類型依然於傳入待填充變量的類型。每次遇到這種情況,循環繼續解析每個元素直到遇到於開始標記匹配的結束標記“)”,endList函數用於檢測結束標記。

    +

    最有趣的部分是遞歸。最簡單的是對數組類型的處理。直到遇到“)”結束標記,我們使用Index函數來獲取數組每個元素的地址,然後遞歸調用read函數處理。和其它錯誤類似,如果輸入數據導致解碼器的引用超出了數組的范圍,解碼器將拋出panic異常。slice也采用類似方法解析,不同的是我們將爲每個元素創建新的變量,然後將元素添加到slice的末尾。

    +

    在循環處理結構體和map每個元素時必鬚解碼一個(key value)格式的對應子列表。對於結構體,key部分對於成員的名字。和數組類似,我們使用FieldByName找到結構體對應成員的變量,然後遞歸調用read函數處理。對於map,key可能是任意類型,對元素的處理方式和slice類似,我們創建一個新的變量,然後遞歸填充它,最後將新解析到的key/value對添加到map。

    +
    func readList(lex *lexer, v reflect.Value) {
    +    switch v.Kind() {
    +    case reflect.Array: // (item ...)
    +        for i := 0; !endList(lex); i++ {
    +            read(lex, v.Index(i))
    +        }
    +
    +    case reflect.Slice: // (item ...)
    +        for !endList(lex) {
    +            item := reflect.New(v.Type().Elem()).Elem()
    +            read(lex, item)
    +            v.Set(reflect.Append(v, item))
    +        }
    +
    +    case reflect.Struct: // ((name value) ...)
    +        for !endList(lex) {
    +            lex.consume('(')
    +            if lex.token != scanner.Ident {
    +                panic(fmt.Sprintf("got token %q, want field name", lex.text()))
    +            }
    +            name := lex.text()
    +            lex.next()
    +            read(lex, v.FieldByName(name))
    +            lex.consume(')')
    +        }
    +
    +    case reflect.Map: // ((key value) ...)
    +        v.Set(reflect.MakeMap(v.Type()))
    +        for !endList(lex) {
    +            lex.consume('(')
    +            key := reflect.New(v.Type().Key()).Elem()
    +            read(lex, key)
    +            value := reflect.New(v.Type().Elem()).Elem()
    +            read(lex, value)
    +            v.SetMapIndex(key, value)
    +            lex.consume(')')
    +        }
    +
    +    default:
    +        panic(fmt.Sprintf("cannot decode list into %v", v.Type()))
    +    }
    +}
    +
    +func endList(lex *lexer) bool {
    +    switch lex.token {
    +    case scanner.EOF:
    +        panic("end of file")
    +    case ')':
    +        return true
    +    }
    +    return false
    +}
    +
    +

    最後,我們將解析器包裝爲導出的Unmarshal解碼函數,隱藏了一些初始化和清理等邊緣處理。內部解析器以panic的方式拋出錯誤,但是Unmarshal函數通過在defer語句調用recover函數來捕獲內部panic(§5.10),然後返迴一個對panic對應的錯誤信息。

    +
    // Unmarshal parses S-expression data and populates the variable
    +// whose address is in the non-nil pointer out.
    +func Unmarshal(data []byte, out interface{}) (err error) {
    +    lex := &lexer{scan: scanner.Scanner{Mode: scanner.GoTokens}}
    +    lex.scan.Init(bytes.NewReader(data))
    +    lex.next() // get the first token
    +    defer func() {
    +        // NOTE: this is not an example of ideal error handling.
    +        if x := recover(); x != nil {
    +            err = fmt.Errorf("error at %s: %v", lex.scan.Position, x)
    +        }
    +    }()
    +    read(lex, reflect.ValueOf(out).Elem())
    +    return nil
    +}
    +
    +

    生産實現不應該對任何輸入問題都用panic形式報告,而且應該報告一些錯誤相關的信息,例如出現錯誤輸入的行號和位置等。盡管如此,我們希望通過這個例子來展示類似encoding/json等包底層代碼的實現思路,以及如何使用反射機製來填充數據結構。

    +

    練習 12.8: sexpr.Unmarshal函數和json.Marshal一樣(譯註:這可能是筆誤,我覺得應該是指json.Unmarshal函數),都要求在解碼前輸入完整的字節slice。定義一個和json.Decoder類似的sexpr.Decoder類型,支持從一個io.Reader流解碼。脩改sexpr.Unmarshal函數,使用這個新的類型實現。

    +

    練習 12.9: 編寫一個基於標記的API用於解碼S表達式,參考xml.Decoder(7.14)的風格。你將需要五種類型的標記:Symbol、String、Int、StartList和EndList。

    +

    練習 12.10: 擴展sexpr.Unmarshal函數,支持布爾型、浮點數和interface類型的解碼,使用 練習 12.3: 的方案。(提示:要解碼接口,你需要將name映射到每個支持類型的reflect.Type。)

    diff --git a/ch12/ch12-07.html b/ch12/ch12-07.html index b93323c..8834d2e 100644 --- a/ch12/ch12-07.html +++ b/ch12/ch12-07.html @@ -8,7 +8,7 @@ 獲取結構體字段標識 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,122 @@

    12.7. 獲取結構體字段標識

    -

    TODO

    +

    在4.5節我們使用構體成員標籤用於設置對應JSON對應的名字。其中json成員標籤讓我們可以選擇成員的名字和抑製零值成員的輸出。在本節,我們將看到如果通過反射機製類獲取成員標籤。

    +

    對於一個web服務,大部分HTTP處理函數要做的第一件事情就是展開請求中的參數到本地變量中。我們定義了一個工具函數,叫params.Unpack,通過使用結構體成員標籤機製來讓HTTP處理函數解析請求參數更方便。

    +

    首先,我們看看如何使用它。下面的search函數是一個HTTP請求處理函數。它定義了一個匿名結構體類型的變量,用結構體的每個成員表示HTTP請求的參數。其中結構體成員標籤指明了對於請求參數的名字,爲了減少UTRL的長度這些參數名通常都是神祕的縮略詞。Unpack將請求參數填充到合適的結構體成員中,這樣我們可以方便地通過合適的類型類來訪問這些參數。

    +
    gopl.io/ch12/search
    +
    +import "gopl.io/ch12/params"
    +
    +// search implements the /search URL endpoint.
    +func search(resp http.ResponseWriter, req *http.Request) {
    +    var data struct {
    +        Labels     []string `http:"l"`
    +        MaxResults int      `http:"max"`
    +        Exact      bool     `http:"x"`
    +    }
    +    data.MaxResults = 10 // set default
    +    if err := params.Unpack(req, &data); err != nil {
    +        http.Error(resp, err.Error(), http.StatusBadRequest) // 400
    +        return
    +    }
    +
    +    // ...rest of handler...
    +    fmt.Fprintf(resp, "Search: %+v\n", data)
    +}
    +
    +

    下面的Unpack函數主要完成三件事情。第一,它調用req.ParseForm()來解析HTTP請求。然後,req.Form將包含所有的請求參數,不管HTTP客戶端使用的是GET還是POST請求方法。

    +

    下一步,Unpack函數將構建每個結構體成員有效參數名字到成員變量的映射。如果結構體成員有成員標籤的話,有效參數名字可能和實際的成員名字不相同。reflect.Type的Field方法將返迴一個reflect.StructField,里面含有每個成員的名字、類型和可選的成員標籤等信息。其中成員標籤信息對應reflect.StructTag類型的字符串,併且提供了Get方法用於解析和根據特定key提取的子串,例如這里的http:"..."形式的子串。

    +
    gopl.io/ch12/params
    +
    +// Unpack populates the fields of the struct pointed to by ptr
    +// from the HTTP request parameters in req.
    +func Unpack(req *http.Request, ptr interface{}) error {
    +    if err := req.ParseForm(); err != nil {
    +        return err
    +    }
    +
    +    // Build map of fields keyed by effective name.
    +    fields := make(map[string]reflect.Value)
    +    v := reflect.ValueOf(ptr).Elem() // the struct variable
    +    for i := 0; i < v.NumField(); i++ {
    +        fieldInfo := v.Type().Field(i) // a reflect.StructField
    +        tag := fieldInfo.Tag           // a reflect.StructTag
    +        name := tag.Get("http")
    +        if name == "" {
    +            name = strings.ToLower(fieldInfo.Name)
    +        }
    +        fields[name] = v.Field(i)
    +    }
    +
    +    // Update struct field for each parameter in the request.
    +    for name, values := range req.Form {
    +        f := fields[name]
    +        if !f.IsValid() {
    +            continue // ignore unrecognized HTTP parameters
    +        }
    +        for _, value := range values {
    +            if f.Kind() == reflect.Slice {
    +                elem := reflect.New(f.Type().Elem()).Elem()
    +                if err := populate(elem, value); err != nil {
    +                    return fmt.Errorf("%s: %v", name, err)
    +                }
    +                f.Set(reflect.Append(f, elem))
    +            } else {
    +                if err := populate(f, value); err != nil {
    +                    return fmt.Errorf("%s: %v", name, err)
    +                }
    +            }
    +        }
    +    }
    +    return nil
    +}
    +
    +

    最後,Unpack遍歷HTTP請求的name/valu參數鍵值對,併且根據更新相應的結構體成員。迴想一下,同一個名字的參數可能出現多次。如果發生這種情況,併且對應的結構體成員是一個slice,那麽就將所有的參數添加到slice中。其它情況,對應的成員值將被覆蓋,隻有最後一次出現的參數值才是起作用的。

    +

    populate函數小心用請求的字符串類型參數值來填充單一的成員v(或者是slice類型成員中的單一的元素)。目前,它僅支持字符串、有符號整數和布爾型。其中其它的類型將留做練習任務。

    +
    func populate(v reflect.Value, value string) error {
    +    switch v.Kind() {
    +    case reflect.String:
    +        v.SetString(value)
    +
    +    case reflect.Int:
    +        i, err := strconv.ParseInt(value, 10, 64)
    +        if err != nil {
    +            return err
    +        }
    +        v.SetInt(i)
    +
    +    case reflect.Bool:
    +        b, err := strconv.ParseBool(value)
    +        if err != nil {
    +            return err
    +        }
    +        v.SetBool(b)
    +
    +    default:
    +        return fmt.Errorf("unsupported kind %s", v.Type())
    +    }
    +    return nil
    +}
    +
    +

    如果我們上上面的處理程序添加到一個web服務器,則可以産生以下的會話:

    +
    $ go build gopl.io/ch12/search
    +$ ./search &
    +$ ./fetch 'http://localhost:12345/search'
    +Search: {Labels:[] MaxResults:10 Exact:false}
    +$ ./fetch 'http://localhost:12345/search?l=golang&l=programming'
    +Search: {Labels:[golang programming] MaxResults:10 Exact:false}
    +$ ./fetch 'http://localhost:12345/search?l=golang&l=programming&max=100'
    +Search: {Labels:[golang programming] MaxResults:100 Exact:false}
    +$ ./fetch 'http://localhost:12345/search?x=true&l=golang&l=programming'
    +Search: {Labels:[golang programming] MaxResults:10 Exact:true}
    +$ ./fetch 'http://localhost:12345/search?q=hello&x=123'
    +x: strconv.ParseBool: parsing "123": invalid syntax
    +$ ./fetch 'http://localhost:12345/search?q=hello&max=lots'
    +max: strconv.ParseInt: parsing "lots": invalid syntax
    +

    練習 12.11: 編寫相應的Pack函數,給定一個結構體值,Pack函數將返迴合併了所有結構體成員和值的URL。

    +

    練習 12.12: 擴展成員標籤以表示一個請求參數的有效值規則。例如,一個字符串可以是有效的email地址或一個信用卡號碼,還有一個整數可能需要是有效的郵政編碼。脩改Unpack函數以檢査這些規則。

    +

    練習 12.13: 脩改S表達式的編碼器(§12.4)和解碼器(§12.6),采用和encoding/json包(§4.5)類似的方式使用成員標籤中的sexpr:"..."字串。

    diff --git a/ch12/ch12-08.html b/ch12/ch12-08.html index 3af81ac..acb15d3 100644 --- a/ch12/ch12-08.html +++ b/ch12/ch12-08.html @@ -8,7 +8,7 @@ 顯示一個類型的方法集 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,40 @@

    12.8. 顯示一個類型的方法集

    -

    TODO

    +

    我們的最後一個例子是使用reflect.Type來打印任意值的類型和枚舉它的方法:

    +
    gopl.io/ch12/methods
    +
    +// Print prints the method set of the value x.
    +func Print(x interface{}) {
    +    v := reflect.ValueOf(x)
    +    t := v.Type()
    +    fmt.Printf("type %s\n", t)
    +
    +    for i := 0; i < v.NumMethod(); i++ {
    +        methType := v.Method(i).Type()
    +        fmt.Printf("func (%s) %s%s\n", t, t.Method(i).Name,
    +            strings.TrimPrefix(methType.String(), "func"))
    +    }
    +}
    +
    +

    reflect.Type和reflect.Value都提供了一個Method方法。每次t.Method(i)調用將一個reflect.Method的實例,對應一個用於描述一個方法的名稱和類型的結構體。每次v.Method(i)方法調用都返迴一個reflect.Value以表示對應的值(§6.4),也就是一個方法是幫到它的接收者的。使用reflect.Value.Call方法(我們之類沒有演示),將可以調用一個Func類型的Value,但是這個例子中隻用到了它的類型。

    +

    這是屬於time.Duration和*strings.Replacer兩個類型的方法:

    +
    methods.Print(time.Hour)
    +// Output:
    +// type time.Duration
    +// func (time.Duration) Hours() float64
    +// func (time.Duration) Minutes() float64
    +// func (time.Duration) Nanoseconds() int64
    +// func (time.Duration) Seconds() float64
    +// func (time.Duration) String() string
    +
    +methods.Print(new(strings.Replacer))
    +// Output:
    +// type *strings.Replacer
    +// func (*strings.Replacer) Replace(string) string
    +// func (*strings.Replacer) WriteString(io.Writer, string) (int, error)
    +`
    +
    diff --git a/ch12/ch12-09.html b/ch12/ch12-09.html index d82c337..60ea769 100644 --- a/ch12/ch12-09.html +++ b/ch12/ch12-09.html @@ -8,7 +8,7 @@ 幾點忠告 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,15 @@

    12.9. 幾點忠告

    -

    TODO

    +

    雖然反射提供的API遠多於我們講到的,我們前面的例子主要是給出了一個方向,通過反射可以實現哪些功能。反射是一個強大併富有表達力的工具,但是它應該被小心地使用,原因有三。

    +

    第一個原因是,基於反射的代碼是比較脆弱的。對於每一個會導致編譯器報告類型錯誤的問題,在反射中都有與之相對應的問題,不同的是編譯器會在構建時馬上報告錯誤,而反射則是在眞正運行到的時候才會拋出panic異常,可能是寫完代碼很久之後的時候了,而且程序也可能運行了很長的時間。

    +

    以前面的readList函數(§12.6)爲例,爲了從輸入讀取字符串併填充int類型的變量而調用的reflect.Value.SetString方法可能導致panic異常。絶大多數使用反射的程序都有類似的風險,需要非常小心地檢査每個reflect.Value的對於值的類型、是否可取地址,還有是否可以被脩改等。

    +

    避免這種因反射而導致的脆弱性的問題的最好方法是將所有的反射相關的使用控製在包的內部,如果可能的話避免在包的API中直接暴露reflect.Value類型,這樣可以限製一些非法輸入。如果無法做到這一點,在每個有風險的操作前指向額外的類型檢査。以標準庫中的代碼爲例,當fmt.Printf收到一個非法的操作數是,它併不會拋出panic異常,而是打印相關的錯誤信息。程序雖然還有BUG,但是會更加容易診斷。

    +
    fmt.Printf("%d %s\n", "hello", 42) // "%!d(string=hello) %!s(int=42)"
    +
    +

    反射同樣降低了程序的安全性,還影響了自動化重構和分析工具的準確性,因爲它們無法識别運行時才能確認的類型信息。

    +

    避免使用反射的第二個原因是,卽使對應類型提供了相同文檔,但是反射的操作不能做靜態類型檢査,而且大量反射的代碼通常難以理解。總是需要小心翼翼地爲每個導出的類型和其它接受interface{}或reflect.Value類型參數的函數維護説明文檔。

    +

    第三個原因,基於反射的代碼通常比正常的代碼運行速度慢一到兩個數量級。對於一個典型的項目,大部分函數的性能和程序的整體性能關繫不大,所以使用反射可能會使程序更加清晰。測試是一個特别適合使用反射的場景,因爲每個測試的數據集都很小。但是對於性能關鍵路徑的函數,最好避免使用反射。

    diff --git a/ch12/ch12.html b/ch12/ch12.html index 673637a..d61233a 100644 --- a/ch12/ch12.html +++ b/ch12/ch12.html @@ -8,7 +8,7 @@ 反射 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13-01.html b/ch13/ch13-01.html index 1e8da81..c4200da 100644 --- a/ch13/ch13-01.html +++ b/ch13/ch13-01.html @@ -8,7 +8,7 @@ unsafe.Sizeof, Alignof 和 Offsetof | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13-02.html b/ch13/ch13-02.html index a3bc036..68743b0 100644 --- a/ch13/ch13-02.html +++ b/ch13/ch13-02.html @@ -8,7 +8,7 @@ unsafe.Pointer | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13-03.html b/ch13/ch13-03.html index 51a5f42..e90dec5 100644 --- a/ch13/ch13-03.html +++ b/ch13/ch13-03.html @@ -8,7 +8,7 @@ 示例: 深度相等判斷 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13-04.html b/ch13/ch13-04.html index 1dcb071..d8a2955 100644 --- a/ch13/ch13-04.html +++ b/ch13/ch13-04.html @@ -8,7 +8,7 @@ 通過cgo調用C代碼 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13-05.html b/ch13/ch13-05.html index c566f49..f60d49e 100644 --- a/ch13/ch13-05.html +++ b/ch13/ch13-05.html @@ -8,7 +8,7 @@ 幾點忠告 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch13/ch13.html b/ch13/ch13.html index 2b5ba95..a994970 100644 --- a/ch13/ch13.html +++ b/ch13/ch13.html @@ -8,7 +8,7 @@ 底層編程 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-01.html b/ch2/ch2-01.html index abc62d7..4f0d47b 100644 --- a/ch2/ch2-01.html +++ b/ch2/ch2-01.html @@ -8,7 +8,7 @@ 命名 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-02.html b/ch2/ch2-02.html index 40c4e6a..35c833e 100644 --- a/ch2/ch2-02.html +++ b/ch2/ch2-02.html @@ -8,7 +8,7 @@ 聲明 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-03.html b/ch2/ch2-03.html index 8680038..0a0863b 100644 --- a/ch2/ch2-03.html +++ b/ch2/ch2-03.html @@ -8,7 +8,7 @@ 變量 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-04.html b/ch2/ch2-04.html index ee2e0c3..843a221 100644 --- a/ch2/ch2-04.html +++ b/ch2/ch2-04.html @@ -8,7 +8,7 @@ 賦值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-05.html b/ch2/ch2-05.html index 902f83c..e2e4f4c 100644 --- a/ch2/ch2-05.html +++ b/ch2/ch2-05.html @@ -8,7 +8,7 @@ 類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-06.html b/ch2/ch2-06.html index 127591f..8de0e8e 100644 --- a/ch2/ch2-06.html +++ b/ch2/ch2-06.html @@ -8,7 +8,7 @@ 包和文件 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2-07.html b/ch2/ch2-07.html index 781603f..8df6d64 100644 --- a/ch2/ch2-07.html +++ b/ch2/ch2-07.html @@ -8,7 +8,7 @@ 作用域 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch2/ch2.html b/ch2/ch2.html index 3cb3549..ef29bfe 100644 --- a/ch2/ch2.html +++ b/ch2/ch2.html @@ -8,7 +8,7 @@ 程序結構 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-01.html b/ch3/ch3-01.html index aaf6017..d9ca8a2 100644 --- a/ch3/ch3-01.html +++ b/ch3/ch3-01.html @@ -8,7 +8,7 @@ 整型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-02.html b/ch3/ch3-02.html index fcb5917..21f87f7 100644 --- a/ch3/ch3-02.html +++ b/ch3/ch3-02.html @@ -8,7 +8,7 @@ 浮點數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-03.html b/ch3/ch3-03.html index 7cab1f5..272dabb 100644 --- a/ch3/ch3-03.html +++ b/ch3/ch3-03.html @@ -8,7 +8,7 @@ 複數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-04.html b/ch3/ch3-04.html index 96414e3..9a9d6f3 100644 --- a/ch3/ch3-04.html +++ b/ch3/ch3-04.html @@ -8,7 +8,7 @@ 布爾型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-05.html b/ch3/ch3-05.html index 67a9c4e..14173b1 100644 --- a/ch3/ch3-05.html +++ b/ch3/ch3-05.html @@ -8,7 +8,7 @@ 字符串 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3-06.html b/ch3/ch3-06.html index 6223946..2116ef1 100644 --- a/ch3/ch3-06.html +++ b/ch3/ch3-06.html @@ -8,7 +8,7 @@ 常量 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch3/ch3.html b/ch3/ch3.html index fc73884..4e505ed 100644 --- a/ch3/ch3.html +++ b/ch3/ch3.html @@ -8,7 +8,7 @@ 基礎數據類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-01.html b/ch4/ch4-01.html index b8c0249..cebcf52 100644 --- a/ch4/ch4-01.html +++ b/ch4/ch4-01.html @@ -8,7 +8,7 @@ 數組 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-02.html b/ch4/ch4-02.html index a05a231..ec764e2 100644 --- a/ch4/ch4-02.html +++ b/ch4/ch4-02.html @@ -8,7 +8,7 @@ Slice | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-03.html b/ch4/ch4-03.html index 977f8e3..09df7be 100644 --- a/ch4/ch4-03.html +++ b/ch4/ch4-03.html @@ -8,7 +8,7 @@ Map | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-04.html b/ch4/ch4-04.html index 52498bd..5e524fb 100644 --- a/ch4/ch4-04.html +++ b/ch4/ch4-04.html @@ -8,7 +8,7 @@ 結構體 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-05.html b/ch4/ch4-05.html index ba19114..1bdb20b 100644 --- a/ch4/ch4-05.html +++ b/ch4/ch4-05.html @@ -8,7 +8,7 @@ JSON | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4-06.html b/ch4/ch4-06.html index d23714c..d702f86 100644 --- a/ch4/ch4-06.html +++ b/ch4/ch4-06.html @@ -8,7 +8,7 @@ 文本和HTML模闆 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch4/ch4.html b/ch4/ch4.html index 9483ff5..36d3fe5 100644 --- a/ch4/ch4.html +++ b/ch4/ch4.html @@ -8,7 +8,7 @@ 複合數據類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-01.html b/ch5/ch5-01.html index 1fa738b..7eb2016 100644 --- a/ch5/ch5-01.html +++ b/ch5/ch5-01.html @@ -8,7 +8,7 @@ 函數聲明 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,8 +2030,45 @@

    5.1. 函數聲明

    -

    TODO

    +

    函數聲明包括函數名、形式參數列表、返迴值列表(可省略)以及函數體。

    +
    func name(parameter-list) (result-list) {
    +        body
    +}
    +

    形式參數列表描述了函數的參數名以及參數類型。這些參數作爲局部變量,其值由參數調用者提供。返迴值列表描述了函數返迴值的變量名以及類型。如果函數返迴一個無名變量或者沒有返迴值,返迴值列表的括號是可以省略的。如果一個函數聲明不包括返迴值列表,那麽函數體執行完畢後,不會返迴任何值。 +在hypot函數中,

    +
    func hypot(x, y float64) float64 {
    +        return math.Sqrt(x*x + y*y)
    +}
    +fmt.Println(hypot(3,4)) //"5"
    +

    x和y是形參名,3和4是調用時的傳入的實數,函數返迴了一個float64類型的值。 +返迴值也可以像形式參數一樣被命名。在這種情況下,每個返迴值被聲明成一個局部變量,併根據該返迴值的類型,將其初始化爲0。 +如果一個函數在聲明時,包含返迴值列表,該函數必鬚以 return語句結尾,除非函數明顯無法運行到結尾處。例如函數在結尾時調用了panic異常或函數中存在無限循環。

    +

    正如hypot一樣,如果一組形參或返迴值有相同的類型,我們不必爲每個形參都寫出參數類型。下面2個聲明是等價的:

    +
    func f(i, j, k int, s, t string){/* ...
    +*/
    +}
    +func f(i int, j int, k int,  s string, t string){/* ...
    +*/
    +}
    +

    下面,我們給出4種方法聲明擁有2個int型參數和1個int型返迴值的函數.blank identifier(譯者註:卽下文的_符號)可以強調某個參數未被使用。

    +
    func add(x int, y int) int {return x + y}
    +func sub(x, y int) (z int) { z = x - y; return}
    +func first(x int, _ int) int { return x }
    +func zero(int, int) int { return 0 }
     
    +fmt.Printf("%T\n", add) //"func(int, int) int"
    +fmt.Printf("%T\n", sub)//"func(int, int) int"
    +fmt.Printf("%T\n", first)//"func(int, int) int"
    +fmt.Printf("%T\n", zero)//"func(int, int) int"
    +

    函數的類型被稱爲函數的標識符。如果兩個函數形式參數列表和返迴值列表中的變量類型一一對應,那麽這兩個函數被認爲有相同的類型和標識符。形參和返迴值的變量名不影響函數標識符也不影響它們是否可以以省略參數類型的形式表示。

    +

    每一次函數調用都必鬚按照聲明順序爲所有參數提供實參(參數值)。在函數調用時,Go語言沒有默認參數值,也沒有任何方法可以通過參數名指定形參,因此形參和返迴值的變量名對於函數調用者而言沒有意義。

    +

    在函數體中,函數的形參作爲局部變量,被初始化爲調用者提供的值。函數的形參和有名返迴值作爲函數最外層的局部變量,被存儲在相同的詞法塊中。

    +

    實參通過值的方式傳遞,因此函數的形參是實參的拷貝。對形參進行脩改不會影響實參。但是,如果實參包括引用類型,如指針,slice(切片)、map、function、channel等類型,實參可能會由於函數的簡介引用被脩改。

    +

    你可能會偶爾遇到沒有函數體的函數聲明,這表示該函數不是以Go實現的。這樣的聲明定義了函數標識符。

    +
    package math
    +
    +func Sin(x float64) float //implemented in assembly language
    +
    diff --git a/ch5/ch5-02.html b/ch5/ch5-02.html index bcb6630..54cfea1 100644 --- a/ch5/ch5-02.html +++ b/ch5/ch5-02.html @@ -8,7 +8,7 @@ 遞歸 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-03.html b/ch5/ch5-03.html index 80ef316..587cb7f 100644 --- a/ch5/ch5-03.html +++ b/ch5/ch5-03.html @@ -8,7 +8,7 @@ 多返迴值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-04.html b/ch5/ch5-04.html index 9f3dcd8..9817ad1 100644 --- a/ch5/ch5-04.html +++ b/ch5/ch5-04.html @@ -8,7 +8,7 @@ 錯誤 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-05.html b/ch5/ch5-05.html index 2241121..a646714 100644 --- a/ch5/ch5-05.html +++ b/ch5/ch5-05.html @@ -8,7 +8,7 @@ 函數值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-06.html b/ch5/ch5-06.html index ecd53aa..5bd2e63 100644 --- a/ch5/ch5-06.html +++ b/ch5/ch5-06.html @@ -8,7 +8,7 @@ 匿名函數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-07.html b/ch5/ch5-07.html index 453233b..fb2c67b 100644 --- a/ch5/ch5-07.html +++ b/ch5/ch5-07.html @@ -8,7 +8,7 @@ 可變參數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-08.html b/ch5/ch5-08.html index 5af8c9d..341cb91 100644 --- a/ch5/ch5-08.html +++ b/ch5/ch5-08.html @@ -8,7 +8,7 @@ Deferred函數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-09.html b/ch5/ch5-09.html index 95f4b84..9c13a4a 100644 --- a/ch5/ch5-09.html +++ b/ch5/ch5-09.html @@ -8,7 +8,7 @@ Panic異常 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5-10.html b/ch5/ch5-10.html index 3c7311b..428b9a2 100644 --- a/ch5/ch5-10.html +++ b/ch5/ch5-10.html @@ -8,7 +8,7 @@ Recover捕獲異常 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch5/ch5.html b/ch5/ch5.html index f377fba..cff840b 100644 --- a/ch5/ch5.html +++ b/ch5/ch5.html @@ -8,7 +8,7 @@ 函數 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,8 @@

    第五章 函數

    -

    TODO

    +

    函數可以讓我們將一個語句序列打包爲一個單元,然後可以從程序中其它地方多次調用。函數的機製可以讓我們將一個大的工作分解爲小的任務,這樣的小任務可以讓不同程序員在不同時間、不同地方獨立完成。一個函數同時對用戶隱藏了其實現細節。由於這些因素,對於任何編程語言來説,函數都是一個至關重要的部分。

    +

    我們已經見過許多函數了。現在,讓我們多花一點時間來徹底地討論函數特性。本章的運行示例是一個網絡蜘蛛,也就是web蒐索引擎中負責抓取網頁部分的組件,它們根據抓取網頁中的鏈接繼續抓取鏈接指向的頁面。一個網絡蜘蛛的例子給我們足夠的機會去探索遞歸函數、匿名函數、錯誤處理和函數其它的很多特性。

    diff --git a/ch6/ch6-01.html b/ch6/ch6-01.html index 66a7bf4..7f7161a 100644 --- a/ch6/ch6-01.html +++ b/ch6/ch6-01.html @@ -8,7 +8,7 @@ 方法聲明 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6-02.html b/ch6/ch6-02.html index cc7bba1..ca21910 100644 --- a/ch6/ch6-02.html +++ b/ch6/ch6-02.html @@ -8,7 +8,7 @@ 基於指針對象的方法 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6-03.html b/ch6/ch6-03.html index 3ffcadf..6d18139 100644 --- a/ch6/ch6-03.html +++ b/ch6/ch6-03.html @@ -8,7 +8,7 @@ 通過嵌入結構體來擴展類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6-04.html b/ch6/ch6-04.html index 0136252..b31d75f 100644 --- a/ch6/ch6-04.html +++ b/ch6/ch6-04.html @@ -8,7 +8,7 @@ 方法值和方法表達式 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6-05.html b/ch6/ch6-05.html index 51d9c10..e3c1566 100644 --- a/ch6/ch6-05.html +++ b/ch6/ch6-05.html @@ -8,7 +8,7 @@ 示例: Bit數組 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6-06.html b/ch6/ch6-06.html index d6c4162..fd28274 100644 --- a/ch6/ch6-06.html +++ b/ch6/ch6-06.html @@ -8,7 +8,7 @@ 封裝 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch6/ch6.html b/ch6/ch6.html index b39c5a3..3a81e6c 100644 --- a/ch6/ch6.html +++ b/ch6/ch6.html @@ -8,7 +8,7 @@ 方法 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-01.html b/ch7/ch7-01.html index 41f9fee..b6e7967 100644 --- a/ch7/ch7-01.html +++ b/ch7/ch7-01.html @@ -8,7 +8,7 @@ 接口是合約 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-02.html b/ch7/ch7-02.html index 901605e..0c06a80 100644 --- a/ch7/ch7-02.html +++ b/ch7/ch7-02.html @@ -8,7 +8,7 @@ 接口類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-03.html b/ch7/ch7-03.html index e4b5ef6..a831f35 100644 --- a/ch7/ch7-03.html +++ b/ch7/ch7-03.html @@ -8,7 +8,7 @@ 實現接口的條件 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-04.html b/ch7/ch7-04.html index b558f5a..55b799f 100644 --- a/ch7/ch7-04.html +++ b/ch7/ch7-04.html @@ -8,7 +8,7 @@ flag.Value接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-05.html b/ch7/ch7-05.html index 2614040..f61cea2 100644 --- a/ch7/ch7-05.html +++ b/ch7/ch7-05.html @@ -8,7 +8,7 @@ 接口值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-06.html b/ch7/ch7-06.html index 7de7425..24e9ceb 100644 --- a/ch7/ch7-06.html +++ b/ch7/ch7-06.html @@ -8,7 +8,7 @@ sort.Interface接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-07.html b/ch7/ch7-07.html index c357fd7..62dbb9b 100644 --- a/ch7/ch7-07.html +++ b/ch7/ch7-07.html @@ -8,7 +8,7 @@ http.Handler接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-08.html b/ch7/ch7-08.html index f067694..daed52e 100644 --- a/ch7/ch7-08.html +++ b/ch7/ch7-08.html @@ -8,7 +8,7 @@ error接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-09.html b/ch7/ch7-09.html index cebf0d1..7f9b491 100644 --- a/ch7/ch7-09.html +++ b/ch7/ch7-09.html @@ -8,7 +8,7 @@ 示例: 表達式求值 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-10.html b/ch7/ch7-10.html index ab8103d..9c8e87b 100644 --- a/ch7/ch7-10.html +++ b/ch7/ch7-10.html @@ -8,7 +8,7 @@ 類型斷言 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-11.html b/ch7/ch7-11.html index d1eb5fd..8d9fbff 100644 --- a/ch7/ch7-11.html +++ b/ch7/ch7-11.html @@ -8,7 +8,7 @@ 基於類型斷言識别錯誤類型 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-12.html b/ch7/ch7-12.html index 56377ae..7f0c777 100644 --- a/ch7/ch7-12.html +++ b/ch7/ch7-12.html @@ -8,7 +8,7 @@ 通過類型斷言査詢接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-13.html b/ch7/ch7-13.html index 71b4158..e249c68 100644 --- a/ch7/ch7-13.html +++ b/ch7/ch7-13.html @@ -8,7 +8,7 @@ 類型分支 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-14.html b/ch7/ch7-14.html index bcc91b5..7f906d5 100644 --- a/ch7/ch7-14.html +++ b/ch7/ch7-14.html @@ -8,7 +8,7 @@ 示例: 基於標記的XML解碼 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7-15.html b/ch7/ch7-15.html index 1fd06e0..e9f4b7e 100644 --- a/ch7/ch7-15.html +++ b/ch7/ch7-15.html @@ -8,7 +8,7 @@ 補充幾點 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch7/ch7.html b/ch7/ch7.html index f1aaa67..019ad7e 100644 --- a/ch7/ch7.html +++ b/ch7/ch7.html @@ -8,7 +8,7 @@ 接口 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-01.html b/ch8/ch8-01.html index d044cbe..b7d753c 100644 --- a/ch8/ch8-01.html +++ b/ch8/ch8-01.html @@ -8,7 +8,7 @@ Goroutines | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-02.html b/ch8/ch8-02.html index 33ddf16..89fee54 100644 --- a/ch8/ch8-02.html +++ b/ch8/ch8-02.html @@ -8,7 +8,7 @@ 示例: 併發的Clock服務 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-03.html b/ch8/ch8-03.html index 767b6bb..d6489f3 100644 --- a/ch8/ch8-03.html +++ b/ch8/ch8-03.html @@ -8,7 +8,7 @@ 示例: 併發的Echo服務 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-04.html b/ch8/ch8-04.html index f68e670..7236449 100644 --- a/ch8/ch8-04.html +++ b/ch8/ch8-04.html @@ -8,7 +8,7 @@ Channels | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-05.html b/ch8/ch8-05.html index 4597849..4b1365c 100644 --- a/ch8/ch8-05.html +++ b/ch8/ch8-05.html @@ -8,7 +8,7 @@ 併行的循環 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-06.html b/ch8/ch8-06.html index d737d2c..1ea70a9 100644 --- a/ch8/ch8-06.html +++ b/ch8/ch8-06.html @@ -8,7 +8,7 @@ 示例: 併發的Web爬蟲 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-07.html b/ch8/ch8-07.html index 41f42c9..467cd93 100644 --- a/ch8/ch8-07.html +++ b/ch8/ch8-07.html @@ -8,7 +8,7 @@ 基於select的多路複用 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-08.html b/ch8/ch8-08.html index 1c3f663..ab25bb1 100644 --- a/ch8/ch8-08.html +++ b/ch8/ch8-08.html @@ -8,7 +8,7 @@ 示例: 併發的字典遍歷 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-09.html b/ch8/ch8-09.html index 4417c33..e2bf342 100644 --- a/ch8/ch8-09.html +++ b/ch8/ch8-09.html @@ -8,7 +8,7 @@ 併發的退出 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8-10.html b/ch8/ch8-10.html index 0441d10..89bc320 100644 --- a/ch8/ch8-10.html +++ b/ch8/ch8-10.html @@ -8,7 +8,7 @@ 示例: 聊天服務 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch8/ch8.html b/ch8/ch8.html index 2f33d0f..2e70efb 100644 --- a/ch8/ch8.html +++ b/ch8/ch8.html @@ -8,7 +8,7 @@ Goroutines和Channels | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-01.html b/ch9/ch9-01.html index 5f49c22..4630d5d 100644 --- a/ch9/ch9-01.html +++ b/ch9/ch9-01.html @@ -8,7 +8,7 @@ 競爭條件 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-02.html b/ch9/ch9-02.html index c3fc363..9930dea 100644 --- a/ch9/ch9-02.html +++ b/ch9/ch9-02.html @@ -8,7 +8,7 @@ sync.Mutex互斥鎖 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-03.html b/ch9/ch9-03.html index b392454..6602c9a 100644 --- a/ch9/ch9-03.html +++ b/ch9/ch9-03.html @@ -8,7 +8,7 @@ sync.RWMutex讀寫鎖 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,20 @@

    9.3. sync.RWMutex讀寫鎖

    -

    TODO

    +

    在100刀的存款消失时不做记录多少还是会让我们有一些恐慌,Bob写了一个程序,每秒运行几百次来检查他的银行余额。他会在家,在工作中,甚至会在他的手机上来运行这个程序。银行注意到这些陡增的流量使得存款和取款有了延时,因为所有的余额查询请求是顺序执行的,这样会互斥地获得锁,并且会暂时阻止其它的goroutine运行。

    +

    由于Balance函数只需要读取变量的状态,所以我们同时让多个Balance调用并发运行事实上是安全的,只要在运行的时候没有存款或者取款操作就行。在这种场景下我们需要一种特殊类型的锁,其允许多个只读操作并行执行,但写操作会完全互斥。这种锁叫作“多读单写”锁(multiple readers, single writer lock),Go语言提供的这样的锁是sync.RWMutex:

    +
    var mu sync.RWMutex
    +var balance int
    +func Balance() int {
    +    mu.RLock() // readers lock
    +    defer mu.RUnlock()
    +    return balance
    +}
    +
    +

    Balance函数现在调用了RLock和RUnlock方法来获取和释放一个读取或者共享锁。Deposit函数没有变化,会调用mu.Lock和mu.Unlock方法来获取和释放一个写或互斥锁。

    +

    在这次修改后,Bob的余额查询请求就可以彼此并行地执行并且会很快地完成了。锁在更多的时间范围可用,并且存款请求也能够及时地被响应了。

    +

    RLock只能在临界区共享变量没有任何写入操作时可用。一般来说,我们不应该假设逻辑上的只读函数/方法也不会去更新某一些变量。比如一个方法功能是访问一个变量,但它也有可能会同时去给一个内部的计数器+1(译注:可能是记录这个方法的访问次数啥的),或者去更新缓存--使即时的调用能够更快。如果有疑惑的话,请使用互斥锁。

    +

    RWMutex只有当获得锁的大部分goroutine都是读操作,而锁在竞争条件下,也就是说,goroutine们必须等待才能获取到锁的时候,RWMutex才是最能带来好处的。RWMutex需要更复杂的内部记录,所以会让它比一般的无竞争锁的mutex慢一些。

    diff --git a/ch9/ch9-04.html b/ch9/ch9-04.html index 606226b..46d6975 100644 --- a/ch9/ch9-04.html +++ b/ch9/ch9-04.html @@ -8,7 +8,7 @@ 內存同步 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-05.html b/ch9/ch9-05.html index d9afbaf..fe9e55d 100644 --- a/ch9/ch9-05.html +++ b/ch9/ch9-05.html @@ -8,7 +8,7 @@ sync.Once初始化 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-06.html b/ch9/ch9-06.html index f61bff7..a470df1 100644 --- a/ch9/ch9-06.html +++ b/ch9/ch9-06.html @@ -8,7 +8,7 @@ 競爭條件檢測 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-07.html b/ch9/ch9-07.html index 0ea1311..85a9315 100644 --- a/ch9/ch9-07.html +++ b/ch9/ch9-07.html @@ -8,7 +8,7 @@ 示例: 併發的非阻塞緩存 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9-08.html b/ch9/ch9-08.html index 91f566a..ab9406c 100644 --- a/ch9/ch9-08.html +++ b/ch9/ch9-08.html @@ -8,7 +8,7 @@ Goroutines和線程 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    diff --git a/ch9/ch9.html b/ch9/ch9.html index abbf31d..705dfb6 100644 --- a/ch9/ch9.html +++ b/ch9/ch9.html @@ -8,7 +8,7 @@ 基於共享變量的併發 | Go语言圣经 - + @@ -48,7 +48,13 @@ -
    +
    @@ -2024,7 +2030,8 @@

    第九章 基於共享變量的併發

    -

    TODO

    +

    前一章我們介紹了一些使用goroutine和channel這樣直接而自然的方式來實現併發的方法。然而這樣做我們實際上屏蔽掉了在寫併發代碼時必鬚處理的一些重要而且細微的問題。

    +

    在本章中,我們會細致地了解併發機製。尤其是在多goroutine之間的共享變量,併發問題的分析手段,以及解決這些問題的基本模式。最後我們會解釋goroutine和操作繫統線程之間的技術上的一些區别。

    diff --git a/gitbook/app.js b/gitbook/app.js index 2434ad2..46a921b 100644 --- a/gitbook/app.js +++ b/gitbook/app.js @@ -1,1747 +1,4 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; - -}).call(this,require('_process')) -},{"_process":2}],2:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],3:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.3.2 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * http://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.3.2', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],4:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -// If obj.hasOwnProperty has been overridden, then calling -// obj.hasOwnProperty(prop) will break. -// See: https://github.com/joyent/node/issues/1707 -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -module.exports = function(qs, sep, eq, options) { - sep = sep || '&'; - eq = eq || '='; - var obj = {}; - - if (typeof qs !== 'string' || qs.length === 0) { - return obj; - } - - var regexp = /\+/g; - qs = qs.split(sep); - - var maxKeys = 1000; - if (options && typeof options.maxKeys === 'number') { - maxKeys = options.maxKeys; - } - - var len = qs.length; - // maxKeys <= 0 means that we should not limit keys count - if (maxKeys > 0 && len > maxKeys) { - len = maxKeys; - } - - for (var i = 0; i < len; ++i) { - var x = qs[i].replace(regexp, '%20'), - idx = x.indexOf(eq), - kstr, vstr, k, v; - - if (idx >= 0) { - kstr = x.substr(0, idx); - vstr = x.substr(idx + 1); - } else { - kstr = x; - vstr = ''; - } - - k = decodeURIComponent(kstr); - v = decodeURIComponent(vstr); - - if (!hasOwnProperty(obj, k)) { - obj[k] = v; - } else if (isArray(obj[k])) { - obj[k].push(v); - } else { - obj[k] = [obj[k], v]; - } - } - - return obj; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -},{}],5:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - - case 'boolean': - return v ? 'true' : 'false'; - - case 'number': - return isFinite(v) ? v : ''; - - default: - return ''; - } -}; - -module.exports = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - - if (typeof obj === 'object') { - return map(objectKeys(obj), function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (isArray(obj[k])) { - return map(obj[k], function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).join(sep); - - } - - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -function map (xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f(xs[i], i)); - } - return res; -} - -var objectKeys = Object.keys || function (obj) { - var res = []; - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); - } - return res; -}; - -},{}],6:[function(require,module,exports){ -'use strict'; - -exports.decode = exports.parse = require('./decode'); -exports.encode = exports.stringify = require('./encode'); - -},{"./decode":4,"./encode":5}],7:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var punycode = require('punycode'); - -exports.parse = urlParse; -exports.resolve = urlResolve; -exports.resolveObject = urlResolveObject; -exports.format = urlFormat; - -exports.Url = Url; - -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.host = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.query = null; - this.pathname = null; - this.path = null; - this.href = null; -} - -// Reference: RFC 3986, RFC 1808, RFC 2396 - -// define these here so at least they only have to be -// compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, - - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], - - // RFC 2396: characters not allowed for various reasons. - unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), - - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = ['\''].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), - hostEndingChars = ['/', '?', '#'], - hostnameMaxLen = 255, - hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - unsafeProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }, - querystring = require('querystring'); - -function urlParse(url, parseQueryString, slashesDenoteHost) { - if (url && isObject(url) && url instanceof Url) return url; - - var u = new Url; - u.parse(url, parseQueryString, slashesDenoteHost); - return u; -} - -Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { - if (!isString(url)) { - throw new TypeError("Parameter 'url' must be a string, not " + typeof url); - } - - var rest = url; - - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); - - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - var lowerProto = proto.toLowerCase(); - this.protocol = lowerProto; - rest = rest.substr(proto.length); - } - - // figure out if it's got a host - // user@server is *always* interpreted as a hostname, and url - // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - var slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } - } - - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { - - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c - - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. - - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (var i = 0; i < hostEndingChars.length; i++) { - var hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - - // at this point, either we have an explicit point where the - // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); - } - - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = decodeURIComponent(auth); - } - - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (var i = 0; i < nonHostChars.length; i++) { - var hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) - hostEnd = rest.length; - - this.host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); - - // pull out port. - this.parseHost(); - - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; - - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; - - // validate a little. - if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (var i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) continue; - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { - if (part.charCodeAt(j) > 127) { - // we replace non-ASCII char with a temporary placeholder - // we need this to make sure size of hostname is not - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // we test again with ASCII char only - if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = '/' + notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } - } - } - - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } else { - // hostnames are always lower case. - this.hostname = this.hostname.toLowerCase(); - } - - if (!ipv6Hostname) { - // IDNA Support: Returns a puny coded representation of "domain". - // It only converts the part of the domain name that - // has non ASCII characters. I.e. it dosent matter if - // you call it with a domain that already is in ASCII. - var domainArray = this.hostname.split('.'); - var newOut = []; - for (var i = 0; i < domainArray.length; ++i) { - var s = domainArray[i]; - newOut.push(s.match(/[^A-Za-z0-9_-]/) ? - 'xn--' + punycode.encode(s) : s); - } - this.hostname = newOut.join('.'); - } - - var p = this.port ? ':' + this.port : ''; - var h = this.hostname || ''; - this.host = h + p; - this.href += this.host; - - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - if (rest[0] !== '/') { - rest = '/' + rest; - } - } - } - - // now rest is set to the post-host stuff. - // chop off any delim chars. - if (!unsafeProtocol[lowerProto]) { - - // First, make 100% sure that any "autoEscape" chars get - // escaped, even if encodeURIComponent doesn't think they - // need to be. - for (var i = 0, l = autoEscape.length; i < l; i++) { - var ae = autoEscape[i]; - var esc = encodeURIComponent(ae); - if (esc === ae) { - esc = escape(ae); - } - rest = rest.split(ae).join(esc); - } - } - - - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); - } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - this.query = rest.substr(qm + 1); - if (parseQueryString) { - this.query = querystring.parse(this.query); - } - rest = rest.slice(0, qm); - } else if (parseQueryString) { - // no query string, but parseQueryString still requested - this.search = ''; - this.query = {}; - } - if (rest) this.pathname = rest; - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = '/'; - } - - //to support http.request - if (this.pathname || this.search) { - var p = this.pathname || ''; - var s = this.search || ''; - this.path = p + s; - } - - // finally, reconstruct the href based on what has been validated. - this.href = this.format(); - return this; -}; - -// format a parsed object into a url string -function urlFormat(obj) { - // ensure it's an object, and not a string url. - // If it's an obj, this is a no-op. - // this way, you can call url_format() on strings - // to clean up potentially wonky urls. - if (isString(obj)) obj = urlParse(obj); - if (!(obj instanceof Url)) return Url.prototype.format.call(obj); - return obj.format(); -} - -Url.prototype.format = function() { - var auth = this.auth || ''; - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ':'); - auth += '@'; - } - - var protocol = this.protocol || '', - pathname = this.pathname || '', - hash = this.hash || '', - host = false, - query = ''; - - if (this.host) { - host = auth + this.host; - } else if (this.hostname) { - host = auth + (this.hostname.indexOf(':') === -1 ? - this.hostname : - '[' + this.hostname + ']'); - if (this.port) { - host += ':' + this.port; - } - } - - if (this.query && - isObject(this.query) && - Object.keys(this.query).length) { - query = querystring.stringify(this.query); - } - - var search = this.search || (query && ('?' + query)) || ''; - - if (protocol && protocol.substr(-1) !== ':') protocol += ':'; - - // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. - // unless they had them to begin with. - if (this.slashes || - (!protocol || slashedProtocol[protocol]) && host !== false) { - host = '//' + (host || ''); - if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; - } else if (!host) { - host = ''; - } - - if (hash && hash.charAt(0) !== '#') hash = '#' + hash; - if (search && search.charAt(0) !== '?') search = '?' + search; - - pathname = pathname.replace(/[?#]/g, function(match) { - return encodeURIComponent(match); - }); - search = search.replace('#', '%23'); - - return protocol + host + pathname + search + hash; -}; - -function urlResolve(source, relative) { - return urlParse(source, false, true).resolve(relative); -} - -Url.prototype.resolve = function(relative) { - return this.resolveObject(urlParse(relative, false, true)).format(); -}; - -function urlResolveObject(source, relative) { - if (!source) return relative; - return urlParse(source, false, true).resolveObject(relative); -} - -Url.prototype.resolveObject = function(relative) { - if (isString(relative)) { - var rel = new Url(); - rel.parse(relative, false, true); - relative = rel; - } - - var result = new Url(); - Object.keys(this).forEach(function(k) { - result[k] = this[k]; - }, this); - - // hash is always overridden, no matter what. - // even href="" will remove it. - result.hash = relative.hash; - - // if the relative url is empty, then there's nothing left to do here. - if (relative.href === '') { - result.href = result.format(); - return result; - } - - // hrefs like //foo/bar always cut to the protocol. - if (relative.slashes && !relative.protocol) { - // take everything except the protocol from relative - Object.keys(relative).forEach(function(k) { - if (k !== 'protocol') - result[k] = relative[k]; - }); - - //urlParse appends trailing / to urls like http://www.example.com - if (slashedProtocol[result.protocol] && - result.hostname && !result.pathname) { - result.path = result.pathname = '/'; - } - - result.href = result.format(); - return result; - } - - if (relative.protocol && relative.protocol !== result.protocol) { - // if it's a known url protocol, then changing - // the protocol does weird things - // first, if it's not file:, then we MUST have a host, - // and if there was a path - // to begin with, then we MUST have a path. - // if it is file:, then the host is dropped, - // because that's known to be hostless. - // anything else is assumed to be absolute. - if (!slashedProtocol[relative.protocol]) { - Object.keys(relative).forEach(function(k) { - result[k] = relative[k]; - }); - result.href = result.format(); - return result; - } - - result.protocol = relative.protocol; - if (!relative.host && !hostlessProtocol[relative.protocol]) { - var relPath = (relative.pathname || '').split('/'); - while (relPath.length && !(relative.host = relPath.shift())); - if (!relative.host) relative.host = ''; - if (!relative.hostname) relative.hostname = ''; - if (relPath[0] !== '') relPath.unshift(''); - if (relPath.length < 2) relPath.unshift(''); - result.pathname = relPath.join('/'); - } else { - result.pathname = relative.pathname; - } - result.search = relative.search; - result.query = relative.query; - result.host = relative.host || ''; - result.auth = relative.auth; - result.hostname = relative.hostname || relative.host; - result.port = relative.port; - // to support http.request - if (result.pathname || result.search) { - var p = result.pathname || ''; - var s = result.search || ''; - result.path = p + s; - } - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; - } - - var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), - isRelAbs = ( - relative.host || - relative.pathname && relative.pathname.charAt(0) === '/' - ), - mustEndAbs = (isRelAbs || isSourceAbs || - (result.host && relative.pathname)), - removeAllDots = mustEndAbs, - srcPath = result.pathname && result.pathname.split('/') || [], - relPath = relative.pathname && relative.pathname.split('/') || [], - psychotic = result.protocol && !slashedProtocol[result.protocol]; - - // if the url is a non-slashed url, then relative - // links like ../.. should be able - // to crawl up to the hostname, as well. This is strange. - // result.protocol has already been set by now. - // Later on, put the first path part into the host field. - if (psychotic) { - result.hostname = ''; - result.port = null; - if (result.host) { - if (srcPath[0] === '') srcPath[0] = result.host; - else srcPath.unshift(result.host); - } - result.host = ''; - if (relative.protocol) { - relative.hostname = null; - relative.port = null; - if (relative.host) { - if (relPath[0] === '') relPath[0] = relative.host; - else relPath.unshift(relative.host); - } - relative.host = null; - } - mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); - } - - if (isRelAbs) { - // it's absolute. - result.host = (relative.host || relative.host === '') ? - relative.host : result.host; - result.hostname = (relative.hostname || relative.hostname === '') ? - relative.hostname : result.hostname; - result.search = relative.search; - result.query = relative.query; - srcPath = relPath; - // fall through to the dot-handling below. - } else if (relPath.length) { - // it's relative - // throw away the existing file, and take the new path instead. - if (!srcPath) srcPath = []; - srcPath.pop(); - srcPath = srcPath.concat(relPath); - result.search = relative.search; - result.query = relative.query; - } else if (!isNullOrUndefined(relative.search)) { - // just pull out the search. - // like href='?foo'. - // Put this after the other two cases because it simplifies the booleans - if (psychotic) { - result.hostname = result.host = srcPath.shift(); - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - result.search = relative.search; - result.query = relative.query; - //to support http.request - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.href = result.format(); - return result; - } - - if (!srcPath.length) { - // no path at all. easy. - // we've already handled the other stuff above. - result.pathname = null; - //to support http.request - if (result.search) { - result.path = '/' + result.search; - } else { - result.path = null; - } - result.href = result.format(); - return result; - } - - // if a url ENDs in . or .., then it must get a trailing slash. - // however, if it ends in anything else non-slashy, - // then it must NOT get a trailing slash. - var last = srcPath.slice(-1)[0]; - var hasTrailingSlash = ( - (result.host || relative.host) && (last === '.' || last === '..') || - last === ''); - - // strip single dots, resolve double dots to parent dir - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = srcPath.length; i >= 0; i--) { - last = srcPath[i]; - if (last == '.') { - srcPath.splice(i, 1); - } else if (last === '..') { - srcPath.splice(i, 1); - up++; - } else if (up) { - srcPath.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (!mustEndAbs && !removeAllDots) { - for (; up--; up) { - srcPath.unshift('..'); - } - } - - if (mustEndAbs && srcPath[0] !== '' && - (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { - srcPath.unshift(''); - } - - if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { - srcPath.push(''); - } - - var isAbsolute = srcPath[0] === '' || - (srcPath[0] && srcPath[0].charAt(0) === '/'); - - // put the host back - if (psychotic) { - result.hostname = result.host = isAbsolute ? '' : - srcPath.length ? srcPath.shift() : ''; - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - - mustEndAbs = mustEndAbs || (result.host && srcPath.length); - - if (mustEndAbs && !isAbsolute) { - srcPath.unshift(''); - } - - if (!srcPath.length) { - result.pathname = null; - result.path = null; - } else { - result.pathname = srcPath.join('/'); - } - - //to support request.http - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.auth = relative.auth || result.auth; - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; -}; - -Url.prototype.parseHost = function() { - var host = this.host; - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); - } - if (host) this.hostname = host; -}; - -function isString(arg) { - return typeof arg === "string"; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isNull(arg) { - return arg === null; -} -function isNullOrUndefined(arg) { - return arg == null; -} - -},{"punycode":3,"querystring":6}],8:[function(require,module,exports){ /*! * jQuery JavaScript Library v2.1.4 * http://jquery.com/ @@ -10953,7 +9210,7 @@ return jQuery; })); -},{}],9:[function(require,module,exports){ +},{}],2:[function(require,module,exports){ (function (global){ /** * @license @@ -23308,7 +21565,7 @@ return jQuery; }.call(this)); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],10:[function(require,module,exports){ +},{}],3:[function(require,module,exports){ /*global define:false */ /** * Copyright 2015 Craig Campbell @@ -24331,7 +22588,1750 @@ return jQuery; } }) (window, document); -},{}],11:[function(require,module,exports){ +},{}],4:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":5}],5:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = setTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + setTimeout(drainQueue, 0); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],6:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.3.2 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * http://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.3.2', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],8:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],9:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); + +},{"./decode":7,"./encode":8}],10:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var punycode = require('punycode'); + +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; + +exports.Url = Url; + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = require('querystring'); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a puny coded representation of "domain". + // It only converts the part of the domain name that + // has non ASCII characters. I.e. it dosent matter if + // you call it with a domain that already is in ASCII. + var domainArray = this.hostname.split('.'); + var newOut = []; + for (var i = 0; i < domainArray.length; ++i) { + var s = domainArray[i]; + newOut.push(s.match(/[^A-Za-z0-9_-]/) ? + 'xn--' + punycode.encode(s) : s); + } + this.hostname = newOut.join('.'); + } + + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } + + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} + +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; + + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } + + if (this.query && + isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } + + var search = this.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + Object.keys(this).forEach(function(k) { + result[k] = this[k]; + }, this); + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + Object.keys(relative).forEach(function(k) { + if (k !== 'protocol') + result[k] = relative[k]; + }); + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + Object.keys(relative).forEach(function(k) { + result[k] = relative[k]; + }); + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especialy happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host) && (last === '.' || last === '..') || + last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last == '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especialy happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; + +function isString(arg) { + return typeof arg === "string"; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isNull(arg) { + return arg === null; +} +function isNullOrUndefined(arg) { + return arg == null; +} + +},{"punycode":6,"querystring":9}],11:[function(require,module,exports){ var $ = require('jquery'); function toggleDropdown(e) { @@ -24358,13 +24358,13 @@ module.exports = { }; -},{"jquery":8}],12:[function(require,module,exports){ +},{"jquery":1}],12:[function(require,module,exports){ var $ = require('jquery'); module.exports = $({}); -},{"jquery":8}],13:[function(require,module,exports){ +},{"jquery":1}],13:[function(require,module,exports){ var $ = require('jquery'); var _ = require('lodash'); @@ -24450,7 +24450,7 @@ window.require = function(mods, fn) { module.exports = {}; -},{"./dropdown":11,"./events":12,"./keyboard":14,"./navigation":16,"./sidebar":18,"./state":19,"./storage":20,"./toolbar":21,"jquery":8,"lodash":9}],14:[function(require,module,exports){ +},{"./dropdown":11,"./events":12,"./keyboard":14,"./navigation":16,"./sidebar":18,"./state":19,"./storage":20,"./toolbar":21,"jquery":1,"lodash":2}],14:[function(require,module,exports){ var Mousetrap = require('mousetrap'); var navigation = require('./navigation'); @@ -24488,7 +24488,7 @@ module.exports = { bind: bindShortcut }; -},{"./navigation":16,"./sidebar":18,"mousetrap":10}],15:[function(require,module,exports){ +},{"./navigation":16,"./sidebar":18,"mousetrap":3}],15:[function(require,module,exports){ var state = require('./state'); function showLoading(p) { @@ -24671,9 +24671,11 @@ module.exports = { notify: notifyPageChange }; -},{"./events":12,"./loading":15,"./state":19,"jquery":8,"url":7}],17:[function(require,module,exports){ +},{"./events":12,"./loading":15,"./state":19,"jquery":1,"url":10}],17:[function(require,module,exports){ module.exports = { - isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) + isMobile: function() { + return (document.width <= 600); + } }; },{}],18:[function(require,module,exports){ @@ -24704,9 +24706,14 @@ function isOpen() { // Prepare sidebar: state and toggle button function init() { // Init last state if not mobile - if (!platform.isMobile) { + if (!platform.isMobile()) { toggleSidebar(storage.get('sidebar', true), false); } + + // Close sidebar after clicking a link on mobile + $(document).on('click', '.book-summary li.chapter a', function(e) { + if (platform.isMobile()) toggleSidebar(false, false); + }); } // Filter summary with a list of path @@ -24729,7 +24736,7 @@ module.exports = { filter: filterSummary }; -},{"./platform":17,"./state":19,"./storage":20,"jquery":8,"lodash":9}],19:[function(require,module,exports){ +},{"./platform":17,"./state":19,"./storage":20,"jquery":1,"lodash":2}],19:[function(require,module,exports){ var $ = require('jquery'); var url = require('url'); var path = require('path'); @@ -24743,6 +24750,9 @@ state.update = function(dom) { state.level = $book.data('level'); state.basePath = $book.data('basepath'); + // If book is multilingual, language of this book + state.innerLanguage = $book.data('innerlanguage'); + // Date of build state.revision = $book.data('revision'); @@ -24752,18 +24762,21 @@ state.update = function(dom) { // Title of the chapter state.chapterTitle = $book.data('chapter-title'); - // Absolute url to the root of the book + // Absolute url to the root of the book (inner book) state.root = url.resolve( location.protocol+'//'+location.host, path.dirname(path.resolve(location.pathname.replace(/\/$/, '/index.html'), state.basePath)) - ); + ).replace(/\/?$/, '/'); + + // Absolute root to the language (for multilingual book) + state.bookRoot = state.innerLanguage? url.resolve(state.root, '..') : state.root; }; state.update($); module.exports = state; -},{"jquery":8,"path":1,"url":7}],20:[function(require,module,exports){ +},{"jquery":1,"path":4,"url":10}],20:[function(require,module,exports){ var baseKey = ''; /* @@ -24985,4 +24998,4 @@ module.exports = { createButton: createButton }; -},{"./events":12,"jquery":8,"lodash":9}]},{},[13]); +},{"./events":12,"jquery":1,"lodash":2}]},{},[13]); diff --git a/gitbook/style.css b/gitbook/style.css index 68c3380..78a6bc2 100644 --- a/gitbook/style.css +++ b/gitbook/style.css @@ -1,4 +1,4 @@ -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}.fa-ul>li,sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}*,.fa{-webkit-font-smoothing:antialiased}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*! +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}*,.fa{-webkit-font-smoothing:antialiased}.fa-ul>li,sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*! * Preboot v2 * * Open sourced under MIT license by @mdo. @@ -6,4 +6,4 @@ */.link-inherit,.link-inherit:focus,.link-inherit:hover{color:inherit}.fa,.fa-stack{display:inline-block}/*! * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(./fonts/fontawesome/fontawesome-webfont.eot?v=4.1.0);src:url(./fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0) format('embedded-opentype'),url(./fonts/fontawesome/fontawesome-webfont.woff?v=4.1.0) format('woff'),url(./fonts/fontawesome/fontawesome-webfont.ttf?v=4.1.0) format('truetype'),url(./fonts/fontawesome/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7}.book .book-body .page-wrapper .page-inner section.normal *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}.book .book-body .page-wrapper .page-inner section.normal table td,.book .book-body .page-wrapper .page-inner section.normal table th{padding:6px 13px;border:1px solid #ddd}.book .book-body .page-wrapper .page-inner section.normal table tr{background-color:#fff;border-top:1px solid #ccc}.book .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n){background-color:#f8f8f8}.book .book-body .page-wrapper .page-inner section.normal table th{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(./fonts/fontawesome/fontawesome-webfont.eot?v=4.1.0);src:url(./fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0) format('embedded-opentype'),url(./fonts/fontawesome/fontawesome-webfont.woff?v=4.1.0) format('woff'),url(./fonts/fontawesome/fontawesome-webfont.ttf?v=4.1.0) format('truetype'),url(./fonts/fontawesome/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.book .book-body .page-wrapper .page-inner section.normal *{box-sizing:border-box;-webkit-box-sizing:border-box;font-size:inherit}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em;color:#777}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none;color:inherit}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}.book .book-body .page-wrapper .page-inner section.normal table td,.book .book-body .page-wrapper .page-inner section.normal table th{padding:6px 13px;border:1px solid #ddd}.book .book-body .page-wrapper .page-inner section.normal table tr{background-color:#fff;border-top:1px solid #ccc}.book .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n){background-color:#f8f8f8}.book .book-body .page-wrapper .page-inner section.normal table th{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin:0 0 .85em}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%} \ No newline at end of file diff --git a/index.html b/index.html index 3845d88..8ce222e 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ 前言 | Go语言圣经 - + @@ -46,7 +46,13 @@ -
    +
    diff --git a/progress.md b/progress.md index 6256d89..353efda 100644 --- a/progress.md +++ b/progress.md @@ -32,8 +32,8 @@ - [x] 4.4 Structs - [x] 4.5 JSON - [x] 4.6 Text and HTML Templates -- [ ] Chapter 5: Functions - - [ ] 5.1 Function Declarations +- [x] Chapter 5: Functions + - [x] 5.1 Function Declarations - [ ] 5.2 Recursion - [ ] 5.3 Multiple Return Values - [ ] 5.4 Errors @@ -52,7 +52,7 @@ - [x] 6.6 Encapsulation - [x] Chapter 7: Interfaces - [x] 7.1 Interfaces as Contracts - - [ ] 7.2 Interface Types + - [x] 7.2 Interface Types - [ ] 7.3 Interface Satisfaction - [ ] 7.4 Parsing Flags with flag.Value - [ ] 7.5 Interface Values @@ -77,10 +77,10 @@ - [x] 8.8 Example: Concurrent Directory Traversal - [x] 8.9 Cancellation - [x] 8.10 Example: Chat Server -- [ ] Chapter 9: Concurrency with Shared Variables +- [x] Chapter 9: Concurrency with Shared Variables - [ ] 9.1 Race Conditions - [ ] 9.2 Mutual Exclusion: sync.Mutex - - [ ] 9.3 Read/Write Mutexes: sync.RWMutex + - [x] 9.3 Read/Write Mutexes: sync.RWMutex - [ ] 9.4 Memory Synchronization - [ ] 9.5 Lazy Initialization: sync.Once - [ ] 9.6 The Race Detector @@ -104,13 +104,13 @@ - [x] Chapter 12: Reflection - [x] 12.1 Why Reflection? - [x] 12.2 reflect.Type and reflect.Value - - [ ] 12.3 Display, a Recursive Value Printer - - [ ] 12.4 Example: Encoding S-Expressions - - [ ] 12.5 Setting Variables with reflect.Value - - [ ] 12.6 Example: Decoding S-Expressions - - [ ] 12.7 Accessing Struct Field Tags - - [ ] 12.8 Displaying the Methods of a Type - - [ ] 12.9 A Word of Caution + - [x] 12.3 Display, a Recursive Value Printer + - [x] 12.4 Example: Encoding S-Expressions + - [x] 12.5 Setting Variables with reflect.Value + - [x] 12.6 Example: Decoding S-Expressions + - [x] 12.7 Accessing Struct Field Tags + - [x] 12.8 Displaying the Methods of a Type + - [x] 12.9 A Word of Caution - [x] Chapter 13: Low-Level Programming - [x] 13.1 unsafe.Sizeof, Alignof, and Offsetof - [x] 13.2 unsafe.Pointer From e0a5eb94749b1d82878ae64598188b34e3bea37c Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sun, 3 Jan 2016 19:56:39 +0800 Subject: [PATCH 5/7] Update progress.md --- progress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/progress.md b/progress.md index 8553f07..6567341 100644 --- a/progress.md +++ b/progress.md @@ -53,7 +53,7 @@ - [x] Chapter 7: Interfaces - [x] 7.1 Interfaces as Contracts - [x] 7.2 Interface Types - - [ ] 7.3 Interface Satisfaction + - [x] 7.3 Interface Satisfaction - [ ] 7.4 Parsing Flags with flag.Value - [ ] 7.5 Interface Values - [ ] 7.6 Sorting with sort.Interface From 9787892cb092465a281515abed6557adcad9bb44 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sun, 3 Jan 2016 20:35:38 +0800 Subject: [PATCH 6/7] make loop --- ch7/ch7-03.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ch7/ch7-03.md b/ch7/ch7-03.md index aacf676..89c4788 100644 --- a/ch7/ch7-03.md +++ b/ch7/ch7-03.md @@ -20,7 +20,7 @@ rwc = w // compile error: io.Writer lacks Close method ``` 因爲ReadWriter和ReadWriteCloser包含所有Writer的方法,所以任何實現了ReadWriter和ReadWriteCloser的類型必定也實現了Writer接口 -在進一步學習前,必鬚先解釋表示一個類型持有一個方法當中的細節。迴想在6.2章中,對於每一個命名過的具體類型T;它一些方法的接收者是類型T本身然而另一些則是一個*T的指針。還記得在T類型的參數上調用一個*T的方法是合法的,隻要這個參數是一個變量;編譯器隱式的穫取了它的地址。但這僅僅是一個語法醣:T類型的值不擁有所有*T指針的方法,那這樣它就可能隻實現更少的接口。 +在進一步學習前,必鬚先解釋表示一個類型持有一個方法當中的細節。迴想在6.2章中,對於每一個命名過的具體類型T;它一些方法的接收者是類型T本身然而另一些則是一個*T的指針。還記得在T類型的參數上調用一個*T的方法是合法的,隻要這個參數是一個變量;編譯器隱式的獲取了它的地址。但這僅僅是一個語法醣:T類型的值不擁有所有*T指針的方法,那這樣它就可能隻實現更少的接口。 舉個例子可能會更清晰一點。在第6.5章中,IntSet類型的String方法的接收者是一個指針類型,所以我們不能在一個不能尋址的IntSet值上調用這個方法: ```go @@ -38,9 +38,9 @@ var _ = s.String() // OK: s is a variable and &s has a String method var _ fmt.Stringer = &s // OK var _ fmt.Stringer = s // compile error: IntSet lacks String method ``` -12.8章包含了一個打印齣任意值的所有方法的程序,然後可以使用godoc -analysis=type tool(§10.7.4)展示每個類型的方法和具體類型和接口之間的關繫 +12.8章包含了一個打印出任意值的所有方法的程序,然後可以使用godoc -analysis=type tool(§10.7.4)展示每個類型的方法和具體類型和接口之間的關繫 -就像信封封裝和隱藏信件起來一樣,接口類型封裝和隱藏具體類型和它的值。卽使具體類型有其它的方法也隻有接口類型暴露齣來的方法會被調用到: +就像信封封裝和隱藏信件起來一樣,接口類型封裝和隱藏具體類型和它的值。卽使具體類型有其它的方法也隻有接口類型暴露出來的方法會被調用到: ```go os.Stdout.Write([]byte("hello")) // OK: *os.File has Write method os.Stdout.Close() // OK: *os.File has Close method @@ -50,7 +50,7 @@ w = os.Stdout w.Write([]byte("hello")) // OK: io.Writer has Write method w.Close() // compile error: io.Writer lacks Close method ``` -一個有更多方法的接口類型,比如io.ReadWriter,和少一些方法的接口類型,例如io.Reader,進行對比;更多方法的接口類型會告訴我們更多關於它的值持有的信息,併且對實現它的類型要求更加嚴格。那麽關於interface{}類型,它沒有任何方法,請講齣哪些具體的類型實現了它? +一個有更多方法的接口類型,比如io.ReadWriter,和少一些方法的接口類型,例如io.Reader,進行對比;更多方法的接口類型會告訴我們更多關於它的值持有的信息,併且對實現它的類型要求更加嚴格。那麽關於interface{}類型,它沒有任何方法,請講出哪些具體的類型實現了它? 這看上去好像沒有用,但實際上interface{}被稱爲空接口類型是不可或缺的。因爲空接口類型對實現它的類型沒有要求,所以我們可以將任意一個值賦給空接口類型。 ```go @@ -63,7 +63,7 @@ any = new(bytes.Buffer) ``` 盡管不是很明顯,從本書最早的的例子中我們就已經在使用空接口類型。它允許像fmt.Println或者5.7章中的errorf函數接受任何類型的參數。 -對於創建的一個interface{}值持有一個boolean,float,string,map,pointer,或者任意其它的類型;我們當然不能直接對它持有的值做操作,因爲interface{}沒有任何方法。我們會在7.10章中學到一種用類型斷言來穫取interface{}中值的方法。 +對於創建的一個interface{}值持有一個boolean,float,string,map,pointer,或者任意其它的類型;我們當然不能直接對它持有的值做操作,因爲interface{}沒有任何方法。我們會在7.10章中學到一種用類型斷言來獲取interface{}中值的方法。 因爲接口實現隻依賴於判斷的兩個類型的方法,所以沒有必要定義一個具體類型和它實現的接口之間的關繫。也就是説,嚐試文檔化和斷言這種關繫幾乎沒有用,所以併沒有通過程序強製定義。下面的定義在編譯期斷言一個*bytes.Buffer的值實現了io.Writer接口類型: ```go @@ -79,7 +79,7 @@ var _ io.Writer = (*bytes.Buffer)(nil) 但是併不意味着隻有指針類型滿足接口類型,甚至連一些有設置方法的接口類型也可能會被Go語言中其它的引用類型實現。我們已經看過slice類型的方法(geometry.Path, §6.1)和map類型的方法(url.Values, §6.2.1),後面還會看到函數類型的方法的例子(http.HandlerFunc, §7.7)。甚至基本的類型也可能會實現一些接口;就如我們在7.4章中看到的time.Duration類型實現了fmt.Stringer接口。 -一個具體的類型可能實現了很多不相關的接口。考慮在一個組織齣售數字文化産品比如音樂,電影和書籍的程序中可能定義了下列的具體類型: +一個具體的類型可能實現了很多不相關的接口。考慮在一個組織出售數字文化産品比如音樂,電影和書籍的程序中可能定義了下列的具體類型: ``` go Album Book @@ -97,7 +97,7 @@ type Artifact interface { Created() time.Time } ``` -其它的一些特性隻對特定類型的文化産品纔有。和文字排版特性相關的隻有books和magazines,還有隻有movies和TV劇集和屏幕分辨率相關。 +其它的一些特性隻對特定類型的文化産品才有。和文字排版特性相關的隻有books和magazines,還有隻有movies和TV劇集和屏幕分辨率相關。 ```go type Text interface { Pages() int @@ -124,4 +124,4 @@ type Streamer interface { Format() string } ``` -每一個具體類型的組基於它們相同的行爲可以表示成一個接口類型。不像基於類的語言,他們一個類實現的接口集合需要進行顯式的定義,在Go語言中我們可以在需要的時候定義一個新的抽象或者特定特點的組,而不需要脩改具體類型的定義。當具體的類型來自不同的作者時這種方式會特别有用。當然也確實沒有必要在具體的類型中指齣這些共性。 +每一個具體類型的組基於它們相同的行爲可以表示成一個接口類型。不像基於類的語言,他們一個類實現的接口集合需要進行顯式的定義,在Go語言中我們可以在需要的時候定義一個新的抽象或者特定特點的組,而不需要脩改具體類型的定義。當具體的類型來自不同的作者時這種方式會特别有用。當然也確實沒有必要在具體的類型中指出這些共性。 From 469d4a9db0d53ae17254ee388a6fe6df1feb83b2 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sun, 3 Jan 2016 20:55:55 +0800 Subject: [PATCH 7/7] ch4-1 review --- ch4/ch4-01.md | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/ch4/ch4-01.md b/ch4/ch4-01.md index f71056f..f8aebca 100644 --- a/ch4/ch4-01.md +++ b/ch4/ch4-01.md @@ -1,8 +1,8 @@ ## 4.1. 數組 -數組是一個固定長度的特定類型元素組成的序列,有零個或多個元素。因爲數組的長度是固定的,因此在Go語言中很少直接使用數組。Slice(切片),是可以增長和收縮動態序列,slice功能也更靈活,但是要理解slice工作原理的話需要先理解數組。 +數組是一個由固定長度的特定類型元素組成的序列,一個數組可以由零個或多個元素組成。因爲數組的長度是固定的,因此在Go語言中很少直接使用數組。Slice(切片),是可以增長和收縮動態序列,slice功能也更靈活,但是要理解slice工作原理的話需要先理解數組。 -數組的每個元素可以通過下標來訪問,下標的范圍是從0開始到數組長度減1的位置。內置的len函數將返迴數組中元素的個數。 +數組的每個元素可以通過索引下標來訪問,索引下標的范圍是從0開始到數組長度減1的位置。內置的len函數將返迴數組中元素的個數。 ```Go var a [3]int // array of 3 integers @@ -20,7 +20,7 @@ for _, v := range a { } ``` -默認情況下,數組的每個元素都被初始化爲元素類型對應的零值,對於數字類型來説就是0。我們可以使用數組字面值語法用一組值來初始化數組: +默認情況下,數組的每個元素都被初始化爲元素類型對應的零值,對於數字類型來説就是0。我們也可以使用數組字面值語法用一組值來初始化數組: ```Go var q [3]int = [3]int{1, 2, 3} @@ -28,21 +28,21 @@ var r [3]int = [3]int{1, 2} fmt.Println(r[2]) // "0" ``` -在數組字面值中,如果數組的長度位置出現的是“...”省略號,則表示數組的長度是根據初始化值的個數來計算的。上面q數組的定義可以簡化爲 +在數組字面值中,如果在數組的長度位置出現的是“...”省略號,則表示數組的長度是根據初始化值的個數來計算的。因此,上面q數組的定義可以簡化爲 ```Go q := [...]int{1, 2, 3} fmt.Printf("%T\n", q) // "[3]int" ``` -數組的長度是數組類型的一個組成部分,因此[3]int和[4]int是兩種不同的數組類型。數組的長度必鬚是常量表達式,因爲數組的長度需要在程序的編譯階段確定。 +數組的長度是數組類型的一個組成部分,因此[3]int和[4]int是兩種不同的數組類型。數組的長度必鬚是常量表達式,因爲數組的長度需要在編譯階段確定。 ```Go q := [3]int{1, 2, 3} q = [4]int{1, 2, 3, 4} // compile error: cannot assign [4]int to [3]int ``` -我們將會發現,數組、slice、map和結構體字面值的寫法都很相似。上面的形式是直接提順序供初始化值序列,但是也可以指定一個索引和對應值的列表初始化,像下面這樣: +我們將會發現,數組、slice、map和結構體字面值的寫法都很相似。上面的形式是直接提順序供初始化值序列,但是也可以指定一個索引和對應值列表的方式初始化,就像下面這樣: ```Go type Currency int @@ -56,18 +56,18 @@ const ( symbol := [...]string{USD: "$", EUR: "€", GBP: "£", RMB: "¥"} -fmt.Println(RMB, symbol[RMB]) // "3 "" +fmt.Println(RMB, symbol[RMB]) // "3 ¥" ``` -這種形式的數組字面值形式中,初始化索引的順序是無關緊要的,而且一些索引可以省略,和前面提到的規則一樣,未知道初始值的元素將用零值初始化。例如, +在這種形式的數組字面值形式中,初始化索引的順序是無關緊要的,而且沒用到的索引可以省略,和前面提到的規則一樣,未指定初始值的元素將用零值初始化。例如, ```Go r := [...]int{99: -1} ``` -定義了一個含有100個原始的數組r,最後一個元素初始化爲-1,其它元素都是用0初始化。 +定義了一個含有100個元素的數組r,最後一個元素被初始化爲-1,其它元素都是用0初始化。 -如果一個數組的元素類型是可以相互比較的,那麽數組類型也是可以相互比較的,因此我們可以直接通過==比較運算符來比較兩個數組,隻有當兩個數組的所有元素都是相等的時候數組才是相等的。相對的是不相等比較運算符!=。 +如果一個數組的元素類型是可以相互比較的,那麽數組類型也是可以相互比較的,這時候我們可以直接通過==比較運算符來比較兩個數組,隻有當兩個數組的所有元素都是相等的時候數組才是相等的。是不相等比較運算符!=遵循同樣的規則。 ```Go a := [2]int{1, 2} @@ -78,7 +78,7 @@ d := [3]int{1, 2} fmt.Println(a == d) // compile error: cannot compare [2]int == [3]int ``` -作爲一個更可信的例子,crypto/sha256包的Sum256函數用於生成一個針對任意的字節類型的slice消息的摘要。消息摘要有256bit大小,因此對應[32]byte數組類型。如果兩個消息摘要是相同的,那麽可以認爲兩個消息本身也是相同(譯註:理論上有HASH碼碰撞的清空,但是實際應用可以基本忽略);如果消息摘要不同,那麽消息本身比如也是不同的。下面的例子用SHA256算法分别生成“x”和“X”兩個信息的摘要: +作爲一個眞實的例子,crypto/sha256包的Sum256函數對一個任意的字節slice類型的數據生成一個對應的消息摘要。消息摘要有256bit大小,因此對應[32]byte數組類型。如果兩個消息摘要是相同的,那麽可以認爲兩個消息本身也是相同(譯註:理論上有HASH碼碰撞的情況,但是實際應用可以基本忽略);如果消息摘要不同,那麽消息本身必然也是不同的。下面的例子用SHA256算法分别生成“x”和“X”兩個信息的摘要: ```Go gopl.io/ch4/sha256 @@ -97,11 +97,11 @@ func main() { } ``` -兩個消息雖然隻有一個字符的差異,但是生成的消息摘要則幾乎有一半的bit位是不同的。需要註意Printf函數的%x參數,它用於指定以十六進製的格式打印全部的數組或slice的的元素,%t參數是用於打印布爾型數據,%T參數是用於顯示一個值對應的數據類型。 +上面例子中,兩個消息雖然隻有一個字符的差異,但是生成的消息摘要則幾乎有一半的bit位是不相同的。需要註意Printf函數的%x參數,它用於指定以十六進製的格式打印數組或slice全部的元素,%t參數是用於打印布爾型數據,%T參數是用於顯示一個值對應的數據類型。 -當調用一個函數的時候,函數的每個調用參數將會被賦值給函數本身的參數變量,所以函數參數變量接收的是一個複製的副本,併不是原始調用的參數。因爲函數參數傳遞的機製導致傳遞大的數組類型將是低效的,併且對數組參數的任何的脩改都是發生在複製的數組上,併不是直接脩改調用時原始的數組變量。在這個方面,Go語言對待數組的方式和其它很多編程語言不同,其它編程語言可能會隱式地將數組作爲引用或指針對象傳入被調用的函數。 +當調用一個函數的時候,函數的每個調用參數將會被賦值給函數內部的參數變量,所以函數參數變量接收的是一個複製的副本,併不是原始調用的參數。因爲函數參數傳遞的機製導致傳遞大的數組類型將是低效的,併且對數組參數的任何的脩改都是發生在複製的數組上,併不能直接脩改調用時原始的數組變量。在這個方面,Go語言對待數組的方式和其它很多編程語言不同,其它編程語言可能會隱式地將數組作爲引用或指針對象傳入被調用的函數。 -當然,我們可以顯式地傳入一個數組指針,那樣的話函數對數組的任何脩改都可以直接反饋到調用者。下面的函數用於給[32]byte類型的數組清零: +當然,我們可以顯式地傳入一個數組指針,那樣的話函數通過指針對數組的任何脩改都可以直接反饋到調用者。下面的函數用於給[32]byte類型的數組清零: ```Go func zero(ptr *[32]byte) { @@ -111,7 +111,7 @@ func zero(ptr *[32]byte) { } ``` -其實數組字面值[32]byte{}就可以生成一個32字節的數組。而且每個數組的元素都是零值初始化,也就是0。我們可以將上面的zero函數寫的更簡潔一點: +其實數組字面值[32]byte{}就可以生成一個32字節的數組。而且每個數組的元素都是零值初始化,也就是0。因此,我們可以將上面的zero函數寫的更簡潔一點: ```Go func zero(ptr *[32]byte) { @@ -119,10 +119,8 @@ func zero(ptr *[32]byte) { } ``` -雖然通過指針來傳遞數組參數是高效的,而且也允許在函數內部脩改數組的值,但是因爲數組依然是殭化的類型,因爲數組的類型包含長度信息。zero函數併不能接收指向[16]byte類型數組的指針,而且也沒有任何添加或刪除數組元素的方法。由於這些原因,除了像SHA256這類需要處理特定大小數組的函數外,數組依然很少用作函數參數;相反,我們一般使用slice來替代數組。 +雖然通過指針來傳遞數組參數是高效的,而且也允許在函數內部脩改數組的值,但是數組依然是殭化的類型,因爲數組的類型包含了殭化的長度信息。上面的zero函數併不能接收指向[16]byte類型數組的指針,而且也沒有任何添加或刪除數組元素的方法。由於這些原因,除了像SHA256這類需要處理特定大小數組的特例外,數組依然很少用作函數參數;相反,我們一般使用slice來替代數組。 -**練習 4.1:** 編寫一個函數,計算兩個SHA256碼中不同bit的數目。(參考2.6.2節的PopCount函數。) +**練習 4.1:** 編寫一個函數,計算兩個SHA256哈希碼中不同bit的數目。(參考2.6.2節的PopCount函數。) **練習 4.2:** 編寫一個程序,默認打印標準輸入的以SHA256哈希碼,也可以通過命令行標準參數選擇SHA384或SHA512哈希算法。 - -