Merge pull request #229 from cch123/master

1.4和1.5小错修改
This commit is contained in:
chai2010 2016-01-20 13:51:36 +08:00
commit d4271bad64
4 changed files with 10 additions and 10 deletions

View File

@ -75,11 +75,11 @@ bla kIndex)
gif.GIF是一個struct類型參考4.4節。struct是一組值或者叫字段的集合不同的類型集合在一個struct可以讓我們以一個統一的單元進行處理。anim是一個gif.GIF類型的struct變量。這種寫法會生成一個struct變量併且其內部變量LoopCount字段會被設置爲nframes而其它的字段會被設置爲各自類型默認的零值。struct內部的變量可以以一個點(.)來進行訪問就像在最後兩個賦值語句中顯式地更新了anim這個struct的Delay和Image字段。 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)內置函數將結果append到anim中的幀列表末尾併設置一個默認的80ms的延遲值。循環結束後所有的延遲值被編碼進了GIF圖片中併將結果寫入到輸出流。out這個變量是io.Writer類型這個類型支持把輸出結果寫到很多目標,很快我們就可以看到例子
存循環設置了兩個偏振。x軸偏振使用的是一個sin函數。y軸偏振也是一個正絃波但是其其相對x軸的偏振是一個0-3的隨機值併且初始偏振值是一個零值隨着動畵的每一幀逐漸增加。循環會一直跑到x軸完成五次完整的循環。每一步它都會調用SetColorIndex來爲(x, y)點來染黑色。 層循環設置兩個偏振值。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 $ go build gopl.io/ch1/lissajous

View File

@ -1,8 +1,8 @@
## 1.5. 獲取URL ## 1.5. 獲取URL
對於很多現代應用來説訪問互聯網上的信息和訪問本地文件繫統一樣重要。Go語言在net這個強大package的幫助下提供了一繫列的package來做這件事情使用這些包可以更簡單地用網絡收發信息還可以建立更底層的網絡連接編寫服務器程序。在這些情景下Go語言原生的併發特性在第八章中會介紹顯得尤其好用 對於很多現代應用來説訪問互聯網上的信息和訪問本地文件繫統一樣重要。Go語言在net這個強大package的幫助下提供了一繫列的package來做這件事情使用這些包可以更簡單地用網絡收發信息還可以建立更底層的網絡連接編寫服務器程序。在這些情景下Go語言原生的併發特性在第八章中會介紹顯得尤其好用。
爲了最簡單地展示基於HTTP獲取信息的方式下面給出一個示例程序fetch這個程序將獲取對應的url併將其源文本打印出來這個例子的靈感來源於curl工具譯註unix下的一個網絡相關的工具。當然了curl提供的功能更爲複雜豐富這里我們隻編寫最簡單的樣例。之後我們還會在本書中經常用到這個例子 爲了最簡單地展示基於HTTP獲取信息的方式下面給出一個示例程序fetch這個程序將獲取對應的url併將其源文本打印出來這個例子的靈感來源於curl工具譯註unix下的一個用來發http請求的工具具體可以man curl。當然curl提供的功能更爲複雜豐富這里隻編寫最簡單的樣例。這個樣例之後還會多次被用到
```go ```go
gopl.io/ch1/fetch gopl.io/ch1/fetch
@ -34,7 +34,7 @@ func main() {
} }
``` ```
這個程序從兩個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 $ go build gopl.io/ch1/fetch
@ -52,7 +52,7 @@ $ ./fetch http://bad.gopl.io
fetch: Get http://bad.gopl.io: dial tcp: lookup bad.gopl.io: no such host fetch: Get http://bad.gopl.io: dial tcp: lookup bad.gopl.io: no such host
``` ```
譯註:在大朝的網絡環境下很容易重現這種錯誤下面是Windows下運行得到的錯誤信息 譯註:在大朝的網絡環境下很容易重現這種錯誤下面是Windows下運行得到的錯誤信息
``` ```
$ go run main.go http://gopl.io $ go run main.go http://gopl.io

View File

@ -1,6 +1,6 @@
### 4.2.2. Slice內存技巧 ### 4.2.2. Slice內存技巧
讓我們看看更多的例子,比如轉slice、反轉slice或在slice原有內存空間脩改元素。給定一個字符串列表下面的nonempty函數將在原有slice內存空間之上返迴不包含空字符串的列表 讓我們看看更多的例子,比如轉slice、反轉slice或在slice原有內存空間脩改元素。給定一個字符串列表下面的nonempty函數將在原有slice內存空間之上返迴不包含空字符串的列表
```Go ```Go
gopl.io/ch4/nonempty gopl.io/ch4/nonempty
@ -98,7 +98,7 @@ func main() {
**練習 4.3** 重寫reverse函數使用數組指針代替slice。 **練習 4.3** 重寫reverse函數使用數組指針代替slice。
**練習 4.4** 編寫一個rotate函數通過一次循環完成轉。 **練習 4.4** 編寫一個rotate函數通過一次循環完成轉。
**練習 4.5** 寫一個函數在原地完成消除[]string中相鄰重複的字符串的操作。 **練習 4.5** 寫一個函數在原地完成消除[]string中相鄰重複的字符串的操作。

View File

@ -67,7 +67,7 @@ reverse(a[:])
fmt.Println(a) // "[5 4 3 2 1 0]" fmt.Println(a) // "[5 4 3 2 1 0]"
``` ```
一種將slice元素循環向左轉n個元素的方法是三次調用reverse反轉函數第一次是反轉開頭的n個元素然後是反轉剩下的元素最後是反轉整個slice的元素。如果是向右循環轉,則將第三個函數調用移到第一個調用位置就可以了。) 一種將slice元素循環向左轉n個元素的方法是三次調用reverse反轉函數第一次是反轉開頭的n個元素然後是反轉剩下的元素最後是反轉整個slice的元素。如果是向右循環轉,則將第三個函數調用移到第一個調用位置就可以了。)
```Go ```Go
s := []int{0, 1, 2, 3, 4, 5} s := []int{0, 1, 2, 3, 4, 5}