Go語言聖經-介面1.介面類型是對其它類型行為的抽象和概括2.Go語言中介面類型的獨特之處在於它是滿足隱式實現的3.Go語言中還存在著另外一種類型:介面類型。介面類型是一種抽象的類型4.一個類型可以自由的使用另一個滿足相同介面的類型來進行替換被稱作可替換性(LSP里氏替換) 練習 7.1: 使用來自 ...
Go語言聖經-介面
1.介面類型是對其它類型行為的抽象和概括
2.Go語言中介面類型的獨特之處在於它是滿足隱式實現的
3.Go語言中還存在著另外一種類型:介面類型。介面類型是一種抽象的類型
4.一個類型可以自由的使用另一個滿足相同介面的類型來進行替換被稱作可替換性(LSP里氏替換)
練習 7.1: 使用來自ByteCounter的思路,實現一個針對對單詞和行數的計數器。你會發現bufio.ScanWords非常的有用。
package main import ( "bufio" "fmt" "strings" ) func main() { var c WordsCounter fmt.Fprintf(&c, "hello world 123") fmt.Println(c) //輸出 3 } /* 練習 7.1: 使用來自ByteCounter的思路,實現一個針對對單詞和行數的計數器。你會發現bufio.ScanWords非常的有用。 */ type ByteCounter int func (c *ByteCounter) Write(p []byte) (int, error) { *c += ByteCounter(len(p)) // convert int to ByteCounter return len(p), nil } //定義類型 type WordsCounter int //滿足相同介面的類型 func (w *WordsCounter) Write(p []byte) (int, error) { //分隔字元串 s := strings.NewReader(string(p)) bs := bufio.NewScanner(s) bs.Split(bufio.ScanWords) sum := 0 for bs.Scan() { sum++ } *w = WordsCounter(sum) return sum, nil }