您的当前位置:首页正文

go语言学习笔记4

2020-12-20 来源:易榕旅网
GO语言的interface

interface是一组method的组合,interface可以被任意的对象实现。同理,一个对象可以实现任意多个interface。任意的类型都实现了空interface,(0个method的interface)

package main import ( . \"fmt\" )

type Human struct { name string age int tel string }

type Student struct { Human school string }

type Employee struct { Human company string }

func (h Human) contact() { Println(\"you can call me on\}

func (h Human) say() { Println(\"my name is\}

//重载

func (s Student) say() { Println(\"my name is\}

func (e Employee) say() { Println(\"my name is\}

//定义interface type Men interface { say() contact() }

func main() { //go通过interface实现了duck-type mike := Student{Human: Human{name: \"mike\ ken := Student{Human: Human{name: \"ken\ monkey := Employee{Human: Human{name: \"monkey\age: 23, tel: \"2333\company: \"duohuo\ //定义接口类型的变量 var i Men //i能存储任何含有这个接口的类型 i = mike i.say() //这里的slice和传统意义上的slice不同,他被赋予实现了Men接口的任意结构的对象 x := []Men{mike, ken, monkey} //monkey是不同类型 for i := 0; i < 3; i++ { x[i].say() } }

空interface

空interface(interface{})不包含任何的method。所有类型都实现了空interface。空interface在我们需要存储任意类型的数值时相当有用,因为可以存储任意类型。一个函数把interface{} 作为参数,那么他就可以接受任意类型的值作为参数;如果一个函数返回interface{},就可以返回任意类型的值。

interface作为函数参数

判断interface变量的存储类型

package main import ( . \"fmt\" )

type Element interface{}

type Person struct { name string age int }

func main() { list := make([]Element, 3) list[0] = 1 list[1] = \"hello\" list[2] = Person{\"Dennis\ for _, this_ele := range list { switch this_ele.(type) { //element.(type)不能在switch以外使用 case int: Println(\"int\") case string: Println(\"string\") case Person: Println(\"struct Person\") } } }

Interface的嵌入

type Interface1 interface {

}

type Interface2 interface { Interface1 }

因篇幅问题不能全部显示,请点此查看更多更全内容