Go 語言聖經 7.2 接口類型

7.2 接口類型

知識點

  • 1.接口類型具體描述了一系列方法的集合, 而實現這個方法的具體類型是這個接口類型的實例
  • 2.io.Writer類型是用的最廣泛的接口之一,因爲它提供了所有的類型寫入bytes的抽象
  • 3.接口類型可以組合定義,成爲一個集合方法

代碼

  • 1.章節中樣例
  • 2.練習 7.4
  • 3.練習 7.5
func test_interface_type()  {

    //練習7.4
    node,_ := NewReader("<html>111111</html>")
    fmt.Println(node)
    fmt.Println("================================")

    //練習 7.5
    ss := []byte("11112222")
    rr := bytes.NewReader(ss)
    reader := LimitReader(rr, 6)
    s, _ := ioutil.ReadAll(reader)
    fmt.Println(string(s))

}
type HtmlReader struct {
    r io.Reader
}
func (reader *HtmlReader) Read(p []byte) (n int, err error) {
    n, err = reader.r.Read(p)
    return
}
func creatReader(r io.Reader) io.Reader {
    return &HtmlReader{r:r}
}
func NewReader(s string) (*html.Node, error)  {
    hr := creatReader(strings.NewReader(s))
    node, err := html.Parse(hr)
    return node, err
}
/*
練習 7.5: io包裏面的LimitReader函數接收一個io.Reader接口類型的r和字節數n,
並且返回另一個從r中讀取字節,但是當讀完n個字節後就表示讀到文件結束的Reader。
實現這個LimitReader函數.
*/
type MyLimitReader struct {
    R io.Reader
    N int64
}

func (myLimitReader *MyLimitReader) Read(p []byte) (n int, err error) {
    if myLimitReader.N <= 0 {
        return 0, io.EOF
    }
    if int64(len(p))  > myLimitReader.N {
        p = p[0:myLimitReader.N]
    }
    n, err = myLimitReader.R.Read(p)
    myLimitReader.N -= int64(n)
    return
}

func LimitReader(r io.Reader, n int64) io.Reader {
    return &MyLimitReader{r, n}
}
——不足之處,歡迎補充——

備註

《Go 語言聖經》

  • 學習記錄所使用的GO版本是1.8
  • 學習記錄所使用的編譯器工具爲GoLand
  • 學習記錄所使用的系統環境爲Mac os
  • 學習者有一定的C語言基礎

代碼倉庫

發佈了47 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章