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语言基础

代码仓库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值