fix errata

This commit is contained in:
chai2010 2016-01-07 15:02:42 +08:00
parent 5f3f901bf9
commit ca365a301a
9 changed files with 9 additions and 9 deletions

View File

@ -75,7 +75,7 @@ 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)這個內置函數將結果appen到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)點來染黑色。

View File

@ -153,7 +153,7 @@ func Unmarshal(data []byte, out interface{}) (err error) {
生産實現不應該對任何輸入問題都用panic形式報告而且應該報告一些錯誤相關的信息例如出現錯誤輸入的行號和位置等。盡管如此我們希望通過這個例子來展示類似encoding/json等包底層代碼的實現思路以及如何使用反射機製來填充數據結構。 生産實現不應該對任何輸入問題都用panic形式報告而且應該報告一些錯誤相關的信息例如出現錯誤輸入的行號和位置等。盡管如此我們希望通過這個例子來展示類似encoding/json等包底層代碼的實現思路以及如何使用反射機製來填充數據結構。
**練習 12.8** sexpr.Unmarshal函數和json.Marshal一樣譯註這可能是筆誤我覺得應該是指`json.Unmarshal`函數)都要求在解碼前輸入完整的字節slice。定義一個和json.Decoder類似的sexpr.Decoder類型支持從一個io.Reader流解碼。脩改sexpr.Unmarshal函數使用這個新的類型實現。 **練習 12.8** sexpr.Unmarshal函數和json.Unmarshal一樣都要求在解碼前輸入完整的字節slice。定義一個和json.Decoder類似的sexpr.Decoder類型支持從一個io.Reader流解碼。脩改sexpr.Unmarshal函數使用這個新的類型實現。
**練習 12.9** 編寫一個基於標記的API用於解碼S表達式參考xml.Decoder7.14的風格。你將需要五種類型的標記Symbol、String、Int、StartList和EndList。 **練習 12.9** 編寫一個基於標記的API用於解碼S表達式參考xml.Decoder7.14的風格。你將需要五種類型的標記Symbol、String、Int、StartList和EndList。

View File

@ -56,7 +56,7 @@ fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F
fmt.Printf("%g\n", boilingF-FreezingC) // compile error: type mismatch fmt.Printf("%g\n", boilingF-FreezingC) // compile error: type mismatch
``` ```
比較運算符`==`和`<`也可以用來比較一個命名類型的變量和另一個有相同類型的變量或有相同底層類型的值做比較。但是如果兩個值有着不同的類型,則不能直接進行比較: 比較運算符`==`和`<`也可以用來比較一個命名類型的變量和另一個有相同類型的變量或有相同底層類型的未命名類型的之間做比較。但是如果兩個值有着不同的類型,則不能直接進行比較:
```Go ```Go
var c Celsius var c Celsius

View File

@ -34,7 +34,7 @@ func main() {
} }
``` ```
導入語句將導入的包綁定到一個短小的名字然後通過該短小的名字就可以引用包中導出的全部內容。上面的導入聲明將允許我們以tempconv.CToF的形式來訪問gopl.io/ch2/tempconv包中的內容。在默認情況下導入的包綁定到tempconv名字譯註這包聲明語句指定的名字但是我們也可以綁定到另一個名稱以避免名字衝突§10.3)。 導入語句將導入的包綁定到一個短小的名字然後通過該短小的名字就可以引用包中導出的全部內容。上面的導入聲明將允許我們以tempconv.CToF的形式來訪問gopl.io/ch2/tempconv包中的內容。在默認情況下導入的包綁定到tempconv名字譯註這包聲明語句指定的名字但是我們也可以綁定到另一個名稱以避免名字衝突§10.4)。
cf程序將命令行輸入的一個溫度在Celsius和Fahrenheit溫度單位之間轉換 cf程序將命令行輸入的一個溫度在Celsius和Fahrenheit溫度單位之間轉換

View File

@ -28,7 +28,7 @@ Unicode字符rune類型是和int32等價的類型通常用於表示一個Unic
對於上表中前兩行的運算符,例如+運算符還有一個與賦值相結合的對應運算符+=,可以用於簡化賦值語句。 對於上表中前兩行的運算符,例如+運算符還有一個與賦值相結合的對應運算符+=,可以用於簡化賦值語句。
整數的算術運算符+、-、`*`和`/`可以適用與於整數、浮點數和複數,但是取模運算符%僅用於整數間的運算。對於不同編程語言,%取模運算的行爲可能併不相同。在Go語言中%取模運算符的符號和被取模數的符號總是一致的,因此`-5%3`和`-5%-3`結果都是-2。除法運算符`/`的行爲則依賴於操作數是否爲全爲整數,比如`5.0/4.0`的結果是1.25但是5/4的結果是1因爲整數除法會向着0方向截斷餘數。 算術運算符+、-、`*`和`/`可以適用與於整數、浮點數和複數,但是取模運算符%僅用於整數間的運算。對於不同編程語言,%取模運算的行爲可能併不相同。在Go語言中%取模運算符的符號和被取模數的符號總是一致的,因此`-5%3`和`-5%-3`結果都是-2。除法運算符`/`的行爲則依賴於操作數是否爲全爲整數,比如`5.0/4.0`的結果是1.25但是5/4的結果是1因爲整數除法會向着0方向截斷餘數。
如果一個算術運算的結果不管是有符號或者是無符號的如果需要更多的bit位才能正確表示的話就説明計算結果是溢出了。超出的高位的bit位部分將被丟棄。如果原始的數值是有符號類型而且最左邊的bit爲是1的話那麽最終結果可能是負的例如int8的例子 如果一個算術運算的結果不管是有符號或者是無符號的如果需要更多的bit位才能正確表示的話就説明計算結果是溢出了。超出的高位的bit位部分將被丟棄。如果原始的數值是有符號類型而且最左邊的bit爲是1的話那麽最終結果可能是負的例如int8的例子

View File

@ -116,7 +116,7 @@ bytes包還提供了Buffer類型用於字節slice的緩存。一個Buffer開始
```Go ```Go
gopl.io/ch3/printints gopl.io/ch3/printints
// intsToString is like fmt.Sprintf(values) but adds commas. // intsToString is like fmt.Sprint(values) but adds commas.
func intsToString(values []int) string { func intsToString(values []int) string {
var buf bytes.Buffer var buf bytes.Buffer
buf.WriteByte('[') buf.WriteByte('[')

View File

@ -16,7 +16,7 @@ FormatInt和FormatUint函數可以用不同的進製來格式化數字
fmt.Println(strconv.FormatInt(int64(x), 2)) // "1111011" fmt.Println(strconv.FormatInt(int64(x), 2)) // "1111011"
``` ```
fmt.Printf函數的%b、%d、%u和%x等參數提供功能往往比strconv包的Format函數方便很多特别是在需要包含附加額外信息的時候 fmt.Printf函數的%b、%d、%o和%x等參數提供功能往往比strconv包的Format函數方便很多特别是在需要包含附加額外信息的時候
```Go ```Go
s := fmt.Sprintf("x=%b", x) // "x=1111011" s := fmt.Sprintf("x=%b", x) // "x=1111011"

View File

@ -39,7 +39,7 @@ func parseIPv4(s string) IP {
const noDelay time.Duration = 0 const noDelay time.Duration = 0
const timeout = 5 * time.Minute const timeout = 5 * time.Minute
fmt.Printf("%T %[1]v\n", noDelay) // "time.Duration 0" 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", timeout) // "time.Duration 5m0s"
fmt.Printf("%T %[1]v\n", time.Minute) // "time.Duration 1m0s" fmt.Printf("%T %[1]v\n", time.Minute) // "time.Duration 1m0s"
``` ```

View File

@ -14,7 +14,7 @@
fmt.Println(f(3)) // "-3" fmt.Println(f(3)) // "-3"
fmt.Printf("%T\n", f) // "func(int) int" fmt.Printf("%T\n", f) // "func(int) int"
f = product // 編譯錯誤: can't assign f(int, int) int to f(int) int f = product // compile error: can't assign func(int, int) int to func(int) int
``` ```
函數類型的零值是nil。調用值爲nil的函數值會引起panic錯誤 函數類型的零值是nil。調用值爲nil的函數值會引起panic錯誤