Go 语言圣经 7.1 接口是合约

/*
第七章 接口

1.接口类型是对其它类型行为的抽象和概括
2.Go语言中接口类型的独特之处在于它是满足隐式实现的
*/

7.1 接口是合约

知识点

  • 1.接口合约就像ObjC的继承,继承父类的方法并重新实现,因此可以被合约原函数调用

代码

  • 1.章节中样例
  • 2.练习 7.1
  • 3.练习 7.2
  • 4.练习 7.3
func test_convention()  {

    fmt.Println("test")

    //因为*ByteCounter满足io.Writer的约定,我们可以把它传入Fprintf函数中
    //
    var c byteCounter.ByteCounter
    c.Write([]byte("hello"))
    fmt.Println(c) // "5", = len("hello")
    c = 0          // reset the counter
    var name = "Dolly"
    fmt.Fprintf(&c, "hello, %s", name)
    fmt.Println(c) // "12", = len("hello, Dolly")

    fmt.Println("================================")

    //练习 7.1: 使用来自ByteCounter的思路,实现一个针对对单词和行数的计数器。
    ss := []byte("hello\nI like you\nI like you too")

    var w byteCounter.WordCounter
    w.Write(ss)
    fmt.Println(w)
    w = 0
    fmt.Fprintf(&w, "hi, %s", string(ss))
    fmt.Println(w)
    fmt.Println("================================")

    var l byteCounter.LineCounter
    l.Write(ss)
    fmt.Println(l)
    l = 0
    fmt.Fprintf(&l, "hi\n %s", string(ss))
    fmt.Println(l)
    fmt.Println("================================")

    //练习 7.2: 写一个带有如下函数签名的函数CountingWriter,
    //传入一个io.Writer接口类型,
    //返回一个新的Writer类型把原来的Writer封装在里面和一个表示写入新的Writer字节数的int64类型指针
    var b byteCounter.ByteCounter
    b.Write([]byte("hello"))
    cc, nbytes := byteCounter.CountingWriter(&b)
    fmt.Println(cc, nbytes)
    fmt.Println("================================")

    //练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列。
    arr := []int{9, 8, 3, 4, 5, 6, 7}
    tree1 := byteCounter.Sort(arr)
    fmt.Println(tree1)
}
——不足之处,欢迎补充——
备注

《Go 语言圣经》

  • 学习记录所使用的GO版本是1.8
  • 学习记录所使用的编译器工具为GoLand
  • 学习记录所使用的系统环境为Mac os
  • 学习者有一定的C语言基础

代码仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值