make loop

This commit is contained in:
chai2010
2015-12-26 20:05:30 +08:00
parent 82ec0c025d
commit e15e88dad7
74 changed files with 207 additions and 207 deletions

View File

@@ -1,10 +1,10 @@
## 7.1. 接口約定
目前爲止,我們看到的類型都是具體的類型。一個具體的類型可以準確的描述它所代表的值併且展示對類型本身的一些操作方式就像數字類型的算術操作,切片類型的索引、附加和取范圍操作。具體的類型還可以通過它的方法提供額外的行爲操作。總的來説,當你拿到一個具體的類型時你就知道它的本身是什麽和你可以用它來做什麽。
目前爲止,我們看到的類型都是具體的類型。一個具體的類型可以準確的描述它所代表的值併且展示對類型本身的一些操作方式就像數字類型的算術操作,切片類型的索引、附加和取范圍操作。具體的類型還可以通過它的方法提供額外的行爲操作。總的來説,當你拿到一個具體的類型時你就知道它的本身是什麽和你可以用它來做什麽。
在Go語言中還存在着另外一種類型接口類型。接口類型是一種抽象的類型。它不會暴露它所代表的對象的內部值的結構和這個對象支持的基礎操作的集合;它們隻會展示它們自己的方法。也就是説當你有看到一個接口類型的值時,你不知道它是什麽,唯一知道的就是可以通過它的方法來做什麽。
在Go語言中還存在着另外一種類型接口類型。接口類型是一種抽象的類型。它不會暴露它所代表的對象的內部值的結構和這個對象支持的基礎操作的集合;它們隻會展示它們自己的方法。也就是説當你有看到一個接口類型的值時,你不知道它是什麽,唯一知道的就是可以通過它的方法來做什麽。
在本書中我們一直使用兩個相似的函數來進行字符串的格式化fmt.Printf它會把結果寫到標準輸和fmt.Sprintf它會把結果以字符串的形式返迴。得益於使用接口我們不必可悲的因爲返迴結果在使用方式上的一些淺顯不同就必需把格式化這個最睏難的過程複製一份。實際上這兩個函數都使用了另一個函數fmt.Fprintf來進行封裝。fmt.Fprintf這個函數對它的計算結果會被怎麽使用是完全不知道的。
在本書中我們一直使用兩個相似的函數來進行字符串的格式化fmt.Printf它會把結果寫到標準輸和fmt.Sprintf它會把結果以字符串的形式返迴。得益於使用接口我們不必可悲的因爲返迴結果在使用方式上的一些淺顯不同就必需把格式化這個最睏難的過程複製一份。實際上這兩個函數都使用了另一個函數fmt.Fprintf來進行封裝。fmt.Fprintf這個函數對它的計算結果會被怎麽使用是完全不知道的。
``` go
package fmt
func Fprintf(w io.Writer, format string, args ...interface{}) (int, error)
@@ -17,7 +17,7 @@ func Sprintf(format string, args ...interface{}) string {
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類型這是一個接口類型定義如下
@@ -59,7 +59,7 @@ var name = "Dolly"
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
```go
package fmt
// The String method is used to print values passed