ch3: fix code path

pull/1/head
chai2010 2016-01-20 23:25:13 +08:00
parent 7fe7a309be
commit ca0f87fad9
5 changed files with 9 additions and 31 deletions

View File

@ -75,9 +75,8 @@ func compute() (value float64, ok bool) {
![](../images/ch3-01.png)
<u><i>gopl.io/ch3/surface</i></u>
```Go
gopl.io/ch3/surface
// Surface computes an SVG rendering of a 3-D surface function.
package main
@ -161,5 +160,3 @@ w.Header().Set("Content-Type", "image/svg+xml")
```
這一步在Lissajous例子中不是必須的因爲服務器使用標準的PNG圖像格式可以根據前面的512個字節自動輸出對應的頭部。允許客戶端通過HTTP請求參數設置高度、寬度和顔色等參數。

View File

@ -33,9 +33,8 @@ fmt.Println(cmplx.Sqrt(-1)) // "(0+1i)"
下面的程序使用complex128複數算法來生成一個Mandelbrot圖像。
<u><i>gopl.io/ch3/mandelbrot</i></u>
```Go
gopl.io/ch3/mandelbrot
// Mandelbrot emits a PNG image of the Mandelbrot fractal.
package main
@ -95,6 +94,3 @@ func mandelbrot(z complex128) color.Color {
**練習 3.8** 通過提高精度來生成更多級别的分形。使用四種不同精度類型的數字實現相同的分形complex64、complex128、big.Float和big.Rat。後面兩種類型在math/big包聲明。Float是有指定限精度的浮點數Rat是無效精度的有理數。它們間的性能和內存使用對比如何當渲染圖可見時縮放的級别是多少
**練習 3.9** 編寫一個web服務器用於給客戶端生成分形的圖像。運行客戶端用過HTTP參數參數指定x,y和zoom參數。

View File

@ -115,7 +115,7 @@ for range s {
正如我們前面提到的文本字符串采用UTF8編碼隻是一種慣例但是對於循環的眞正字符串併不是一個慣例這是正確的。如果用於循環的字符串隻是一個普通的二進製數據或者是含有錯誤編碼的UTF8數據將會發送什麽呢
每一個UTF8字符解碼不管是顯式地調用utf8.DecodeRuneInString解碼或是在range循環中隱式地解碼如果遇到一個錯誤的UTF8編碼輸入將生成一個特别的Unicode字符'\uFFFD',在印刷中這個符號通常是一個黑色六角或鑽石形狀,里面包含一個白色的問號?。當程序遇到這樣的一個字符通常是一個危險信號説明輸入併不是一個完美沒有錯誤的UTF8字符串。
每一個UTF8字符解碼不管是顯式地調用utf8.DecodeRuneInString解碼或是在range循環中隱式地解碼如果遇到一個錯誤的UTF8編碼輸入將生成一個特别的Unicode字符'\uFFFD',在印刷中這個符號通常是一個黑色六角或鑽石形狀,里面包含一個白色的問號"<22>"。當程序遇到這樣的一個字符通常是一個危險信號説明輸入併不是一個完美沒有錯誤的UTF8字符串。
UTF8字符串作爲交換格式是非常方便的但是在程序內部采用rune序列可能更方便因爲rune大小一致支持數組索引和方便切割。
@ -147,10 +147,5 @@ fmt.Println(string(0x4eac)) // "京"
如果對應碼點的字符是無效的,則用'\uFFFD'無效字符作爲替換:
```Go
fmt.Println(string(1234567)) // "(?)"
fmt.Println(string(1234567)) // "<EFBFBD>"
```

View File

@ -18,8 +18,8 @@ fmt.Println(basename("abc")) // "abc"
第一個版本併沒有使用任何庫,全部手工硬編碼實現:
<u><i>gopl.io/ch3/basename1</i></u>
```Go
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
func basename(s string) string {
@ -43,9 +43,8 @@ func basename(s string) string {
簡化個版本使用了strings.LastIndex庫函數
<u><i>gopl.io/ch3/basename2</i></u>
```Go
gopl.io/ch3/basename2
func basename(s string) string {
slash := strings.LastIndex(s, "/") // -1 if "/" not found
s = s[slash+1:]
@ -60,9 +59,8 @@ path和path/filepath包提供了關於文件路徑名更一般的函數操作。
讓我們繼續另一個字符串的例子。函數的功能是將一個表示整值的字符串每隔三個字符插入一個逗號分隔符例如“12345”處理後成爲“12,345”。這個版本隻適用於整數類型支持浮點數類型的支持留作練習。
<u><i>gopl.io/ch3/comma</i></u>
```Go
gopl.io/ch3/comma
// comma inserts commas in a non-negative decimal integer string.
func comma(s string) string {
n := len(s)
@ -113,9 +111,8 @@ func Join(s [][]byte, sep []byte) []byte
bytes包還提供了Buffer類型用於字節slice的緩存。一個Buffer開始是空的但是隨着string、byte或[]byte等類型數據的寫入可以動態增長一個bytes.Buffer變量併不需要處理化因爲零值也是有效的
<u><i>gopl.io/ch3/printints</i></u>
```Go
gopl.io/ch3/printints
// intsToString is like fmt.Sprint(values) but adds commas.
func intsToString(values []int) string {
var buf bytes.Buffer
@ -144,7 +141,3 @@ bytes.Buffer類型有着很多實用的功能我們在第七章討論接口
**練習 3.11** 完善comma函數以支持浮點數處理和一個可選的正負號的處理。
**練習 3.12** 編寫一個函數,判斷兩個字符串是否是是相互打亂的,也就是説它們有着相同的字符,但是對應不同的順序。

View File

@ -36,9 +36,8 @@ const (
隨着iota的遞增每個常量對應表達式1 << iota2bit使bit
<u><i>gopl.io/ch3/netflag</i></u>
```Go
gopl.io/ch3/netflag
func IsUp(v Flags) bool { return v&FlagUp == FlagUp }
func TurnDown(v *Flags) { *v &^= FlagUp }
func SetBroadcast(v *Flags) { *v |= FlagBroadcast }
@ -74,5 +73,3 @@ const (
不過iota常量生成規則也有其局限性。例如它併不能用於産生1000的冪KB、MB等因爲Go語言併沒有計算冪的運算符。
**練習 3.13** 編寫KB、MB的常量聲明然後擴展到YB。