接口

package main

import "fmt"

type Sayer interface {
    Say()
}

type Dog struct{}

type Cat struct{}

func (d Dog) Say() {
    fmt.Println("this is dog say...")
}

func (c *Cat) Say() {
    fmt.Println("this is cat say...")
}

func main() {
    var s Sayer
    wangcai := Dog{}
    s = wangcai
    s.Say()
    xiaoh := &Cat{}
    s = xiaoh
    s.Say()
}

点分格式输出地址

type IPAddr [4]byte

/*
实现了Stringer接口的类型(即有String方法),定义了该类型值的原始显示。
当采用任何接受字符的verb(%v %s %q %x %X)动作格式化一个操作数时,
或者被不使用格式字符串如Print函数打印操作数时,会调用String方法来生成输出的文本。
*/
func (i IPAddr) String() string {
    return fmt.Sprintf("%v.%v.%v.%v", i[0], i[1], i[2], i[3])
}

func main() {

    testMap := map[string][]int{
        "hello": {1, 2, 3},
        "world": {},
    }
    fmt.Println(testMap)

    addrs := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }

    for v, a := range addrs {
        fmt.Printf("%v:%v\n", v, a)
    }
}

Readers

创建一个 strings.Reader。 并且以每次 8 字节的速度读取它的输出

func main() {
    r := strings.NewReader("Hello, Reader!")

    b := make([]byte, 8)
    for {
        n, err := r.Read(b)
        fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
        fmt.Printf("b[:n] = %q\n", b[:n])
        if err == io.EOF {
            break
        }
        /*
        n = 8 err = <nil> b = [72 101 108 108 111 44 32 82]
        b[:n] = "Hello, R"
        n = 6 err = <nil> b = [101 97 100 101 114 33 32 82]
        b[:n] = "eader!"
        n = 0 err = EOF b = [101 97 100 101 114 33 32 82]
        b[:n] = ""
        */
    }
}

转载于:https://www.cnblogs.com/huyuan1004/p/11340189.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值