This commit is contained in:
chai2010 2015-12-23 16:27:04 +08:00
parent 429f4e8d65
commit 07738ef92a
8 changed files with 20 additions and 14 deletions

View File

@ -1,17 +1,24 @@
# 貢獻者列表 # 原文作者
*大家幫助完善, 請保證列表有序(忽略大小寫)!* 原文作者 | 簡介
---------------------------------------------------- | -------------------------
![Alan.Donovan](./images/Alan.Donovan.png) | Alan.Donovan: TODO
![Brian W. Kernighan](./images/Brian.W.Kernighan.png)| Brian W. Kernighan:TODO
作者 | 章節 # 中文譯者
中文譯者 | 章節
-------------------------------------- | ------------------------- -------------------------------------- | -------------------------
`chai2010 <chaishushan@gmail.com>` | 前言/第二章/第三章/第十章/第十一章/第十二章/第十三章 `chai2010 <chaishushan@gmail.com>` | 前言/第二章/第三章/第十章/第十一章/第十二章/第十三章
`CrazySssst` | 第三章(0節) `CrazySssst` | 第三章(0節)
`foreversmart <njutree@gmail.com>` | 第七章(0節和1節) `foreversmart <njutree@gmail.com>` | 第七章(0節和1節)
`Xargin <cao1988228@163.com>` | 第一章/第六章/第八章 `Xargin <cao1988228@163.com>` | 第一章/第六章/第八章
# # 譯文授
除特别註明外, 本站內容均采用[知識共享-署名(CC-BY) 3.0協議](http://creativecommons.org/licenses/by/3.0/)授權, 代碼遵循[Go項目的BSD協議](http://golang.org/LICENSE)授權. 除特别註明外, 本站內容均采用[知識共享-署名(CC-BY) 3.0協議](http://creativecommons.org/licenses/by/3.0/)授權, 代碼遵循[Go項目的BSD協議](http://golang.org/LICENSE)授權.
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="./images/by-nc-sa-4.0-88x31.png"></img></a>

View File

@ -149,5 +149,5 @@
* [13.3. 示例: 深度相等判斷](ch13/ch13-03.md) * [13.3. 示例: 深度相等判斷](ch13/ch13-03.md)
* [13.4. 通過cgo調用C代碼](ch13/ch13-04.md) * [13.4. 通過cgo調用C代碼](ch13/ch13-04.md)
* [13.5. 幾點忠告](ch13/ch13-05.md) * [13.5. 幾點忠告](ch13/ch13-05.md)
* [勘誤](errata.md) * [附録](CONTRIBUTORS.md)

View File

@ -122,5 +122,4 @@
* [示例: 深度相等判斷](ch13/ch13-03.md) * [示例: 深度相等判斷](ch13/ch13-03.md)
* [通過cgo調用C代碼](ch13/ch13-04.md) * [通過cgo調用C代碼](ch13/ch13-04.md)
* [幾點忠告](ch13/ch13-05.md) * [幾點忠告](ch13/ch13-05.md)
* [勘誤](errata.md) * [附録](CONTRIBUTORS.md)

View File

@ -2,7 +2,7 @@
本章中對Go語言做了一些介紹實際上Go語言還有很多方面在這有限的篇幅中還沒有覆蓋到。這里我們會把沒有講到的內容也做一些簡單的介紹這樣讀者在之後看到完整的內容之前也可以有個簡單印象。 本章中對Go語言做了一些介紹實際上Go語言還有很多方面在這有限的篇幅中還沒有覆蓋到。這里我們會把沒有講到的內容也做一些簡單的介紹這樣讀者在之後看到完整的內容之前也可以有個簡單印象。
控製流在本章我們隻介紹了if控製和for但是沒有提到switch多路選擇。這里是一個簡單的switch的例子 **控製流:** 在本章我們隻介紹了if控製和for但是沒有提到switch多路選擇。這里是一個簡單的switch的例子
```go ```go
switch coinflip() { switch coinflip() {
@ -38,7 +38,7 @@ func Signum(x int) int {
break和continue語句會改變控製流。和其它語言中的break和continue一樣break會中斷當前的循環併開始執行循環之後的內容而continue會中跳過當前循環併開始執行下一次循環。這兩個語句除了可以控製for循環還可以用來控製switch和select語句(之後會講到)在1.3節中我們看到continue會跳過是內層的循環如果我們想跳過的是更外層的循環的話我們可以在相應的位置加上label這樣break和continue就可以根據我們的想法來continue和break任意循環。這看起來甚至有點像goto語句的作用了。當然一般程序員也不會用到這種操作。這兩種行爲更多地被用到機器生成的代碼中。 break和continue語句會改變控製流。和其它語言中的break和continue一樣break會中斷當前的循環併開始執行循環之後的內容而continue會中跳過當前循環併開始執行下一次循環。這兩個語句除了可以控製for循環還可以用來控製switch和select語句(之後會講到)在1.3節中我們看到continue會跳過是內層的循環如果我們想跳過的是更外層的循環的話我們可以在相應的位置加上label這樣break和continue就可以根據我們的想法來continue和break任意循環。這看起來甚至有點像goto語句的作用了。當然一般程序員也不會用到這種操作。這兩種行爲更多地被用到機器生成的代碼中。
命名類型類型聲明使得我們可以很方便地給一個特殊類型一個名字。因爲struct類型聲明通常非常地長所以我們總要給這種struct取一個名字。本章中就有這樣一個例子二維點類型 **命名類型:** 類型聲明使得我們可以很方便地給一個特殊類型一個名字。因爲struct類型聲明通常非常地長所以我們總要給這種struct取一個名字。本章中就有這樣一個例子二維點類型
```go ```go
type Point struct { type Point struct {
@ -49,11 +49,11 @@ var p Point
類型聲明和命名類型會在第二章中介紹。 類型聲明和命名類型會在第二章中介紹。
指針Go語言提供了指針。指針是一種直接存儲了變量的內存地址的數據類型。在其它語言中比如C語言指針操作是完全不受約束的。在另外一些語言中指針一般被處理爲“引用”除了到處傳遞這些指針之外併不能對這些指針做太多事情。Go語言在這兩種范圍中取了一種平衡。指針是可見的內存地址&操作符可以返迴一個變量的內存地址,併且*操作符可以穫取指針指向的變量內容但是在Go語言里沒有指針運算也就是不能像c語言里可以對指針進行加或減操作。我們會在2.3.2中進行詳細介紹。 **指針:** Go語言提供了指針。指針是一種直接存儲了變量的內存地址的數據類型。在其它語言中比如C語言指針操作是完全不受約束的。在另外一些語言中指針一般被處理爲“引用”除了到處傳遞這些指針之外併不能對這些指針做太多事情。Go語言在這兩種范圍中取了一種平衡。指針是可見的內存地址&操作符可以返迴一個變量的內存地址,併且*操作符可以穫取指針指向的變量內容但是在Go語言里沒有指針運算也就是不能像c語言里可以對指針進行加或減操作。我們會在2.3.2中進行詳細介紹。
方法和接口方法是和命名類型關聯的一類函數。Go語言里比較特殊的是方法可以被關聯到任意一種命名類型。在第六章我們會詳細地講方法。接口是一種抽象類型這種類型可以讓我們以同樣的方式來處理不同的固有類型不用關心它們的具體實現而隻需要關註它們提供的方法。第七章中會詳細説明這些內容。 **方法和接口:** 方法是和命名類型關聯的一類函數。Go語言里比較特殊的是方法可以被關聯到任意一種命名類型。在第六章我們會詳細地講方法。接口是一種抽象類型這種類型可以讓我們以同樣的方式來處理不同的固有類型不用關心它們的具體實現而隻需要關註它們提供的方法。第七章中會詳細説明這些內容。
packagesGo語言提供了一些很好用的package併且這些package是可以擴展的。Go語言社區已經創造併且分享了很多很多。所以Go語言編程大多數情況下就是用已有的package來寫我們自己的代碼。通過這本書我們會講解一些重要的標準庫內的package但是還是有很多我們沒有篇幅去説明因爲我們沒法在這樣的厚度的書里去做一部代碼大全。 **packages** Go語言提供了一些很好用的package併且這些package是可以擴展的。Go語言社區已經創造併且分享了很多很多。所以Go語言編程大多數情況下就是用已有的package來寫我們自己的代碼。通過這本書我們會講解一些重要的標準庫內的package但是還是有很多我們沒有篇幅去説明因爲我們沒法在這樣的厚度的書里去做一部代碼大全。
在你開始寫一個新程序之前,最好先去檢査一下是不是已經有了現成的庫可以幫助你更高效地完成這件事情。你可以在 https://golang.org/pkg 和 https://godoc.org 中找到標準庫和社區寫的package。godoc這個工具可以讓你直接在本地命令行閲讀標準庫的文檔。比如下面這個例子。 在你開始寫一個新程序之前,最好先去檢査一下是不是已經有了現成的庫可以幫助你更高效地完成這件事情。你可以在 https://golang.org/pkg 和 https://godoc.org 中找到標準庫和社區寫的package。godoc這個工具可以讓你直接在本地命令行閲讀標準庫的文檔。比如下面這個例子。
@ -66,7 +66,7 @@ func ListenAndServe(addr string, handler Handler) error
... ...
``` ```
註釋我們之前已經提到過了在源文件的開頭寫的註釋是這個源文件的文檔。在每一個函數之前寫一個説明函數行爲的註釋也是一個好習慣。這些慣例很重要因爲這些內容會被像godoc這樣的工具檢測到併且在執行命令時顯示這些註釋。具體可以參考10.7.4。 **註釋:** 我們之前已經提到過了在源文件的開頭寫的註釋是這個源文件的文檔。在每一個函數之前寫一個説明函數行爲的註釋也是一個好習慣。這些慣例很重要因爲這些內容會被像godoc這樣的工具檢測到併且在執行命令時顯示這些註釋。具體可以參考10.7.4。
多行註釋可以用 `/* ... */` 來包裹,和其它大多數語言一樣。在文件一開頭的註釋一般都是這種形式,或者一大段的解釋性的註釋文字也會被這符號包住,來避免每一行都需要加//。在註釋中//和/*是沒什麽意義的,所以不要在註釋中再嵌入註釋。 多行註釋可以用 `/* ... */` 來包裹,和其它大多數語言一樣。在文件一開頭的註釋一般都是這種形式,或者一大段的解釋性的註釋文字也會被這符號包住,來避免每一行都需要加//。在註釋中//和/*是沒什麽意義的,所以不要在註釋中再嵌入註釋。

View File

@ -1,4 +1,4 @@
# 附録: 勘誤 # 原文勘誤
**p.9, ¶2:** for "can compared", read "can be compared". **p.9, ¶2:** for "can compared", read "can be compared".
(Thanks to Antonio Macías Ojeda, 2015-10-22.) (Thanks to Antonio Macías Ojeda, 2015-10-22.)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB