go语言的魔幻旅程09-接口

362 阅读2分钟

安得广厦千万间,大庇天下寒士俱欢颜

安得广厦千万间,大庇天下寒士俱欢颜,杜工部的一声振臂高呼截止到今天也已经过去了数千年的时间,那么到今天为止,我们现今的社会是否实现了当初杜工部振臂高呼居者有其屋的理想了呢?从今天的实际情况来看,目前对于在一二线打拼的年轻人而言,即使拼尽全力掏空六个钱包的钱,也不足以在一二线城市攒够首付的钱,虽然不至于沦落到有些香港居民住笼屋的悲惨结局,但是日趋上涨的房租对很多的人而言也是一笔不小的开支,长此以往,年轻人肯定是会绷不住的。现在已经有一些这样的苗头了,不买车、不买房、不结婚,低欲望人口的数量正快速增长,一人吃饱,全家不饿也正慢慢的成为佛系青年的自嘲。

接口

1、什么是接口

接口的定义:接口只指定对象应该做什么,至于如何实现这个行为则有对象本身去决定,go语言中接口就是方法签名的集合,当一个类型实现了接口中的所有的方法,我们就称它实现了该接口.

2、go接口的特点

2.1、类型不需要显示声明实现了某个接口:接口被隐式实现,多个类型可以实现同一个接口
2.2、一个类型可以实现多个接口
2.3、接口可以包含一个实例的引用,该实例的类型实现了该接口

2、接口的声明与实现

//举个栗子
type Shaper interface {
    Area() float32
}

type Square struct {
    side float32
}

func (sq *Square) Area() float32 {
    return sq.side * sq.side
}

3、类型断言

//举个栗子

//类型断言
func assert(i interface{}) {  
    s := i.(int) //get the underlying int value from i
    fmt.Println(s)
}
func main() {  
    var s interface{} = 56
    assert(s)
}

//类型选择
func findType(i interface{}) {  
    switch i.(type) {
    case string:
        fmt.Printf("I am a string and my value is %s\n", i.(string))
    case int:
        fmt.Printf("I am an int and my value is %d\n", i.(int))
    default:
        fmt.Printf("Unknown type\n")
    }
}
func main() {  
    findType("Naveen")
    findType(77)
    findType(89.98)
}

4、接口的嵌套

//举个栗子
type ReadWrite interface {
    Read(b Buffer) bool
    Write(b Buffer) bool
}

type Lock interface {
    Lock()
    Unlock()
}

type File interface {
    ReadWrite
    Lock
    Close()
}

总结

接口这部分的内容虽然少,但实际运用的场景还是非常多的,讲解的少不代表鸡肋,至少对于主力编程语言是go的开发这来讲,这部分的基础内容也是必须要掌握的。