go语言中的interface使用实例
go语言中的interface是一组未实现的方法的集合,如果某个对象实现了接口中的所有方法,那么此对象就实现了此接口。与其它面向对象语言不同的是,go中无需显示声明调用了哪个接口。 复制代码 代码如下: package main import ( "fmt" ) type I interface { Get() int Put(int) } type S struct{ i int } func (p *S) Get() int { return p.i } func (p *S) Put(v int) { p.i = v } type R struct{ i int } func (p *R) Get() int { return p.i } func (p *R) Put(v int) { p.i = v } func f1(p I) { fmt.Println(p.Get()) p.Put(1) } //interface{}空接口,能接受任何类型。.(I)是类型断言,用于转换something到I类型的接口 func f2(p interface{}) { if t,ok := p.(S); ok { fmt.Println("S:",t) } else if t,ok := p.(I); ok { fmt.Println("I:",t.Get()) } } func f3(p interface{}) { switch t := p.(type) { case S: fmt.Println("S:",t.Get()) case R: fmt.Println("R:",t.Get()) case I: fmt.Println("I:",t.Get()) default: fmt.Println("unknow type") } } func main() { s := S{101} f1(&s) f2(&s) r := R{1111} f3(&r) } 如上结构S实现了I的两个方法,因此S实现了I。因为S实现了I,因此可以调用f向其传递S类型值得指针。 复制代码 代码如下: if t,ok := something.(I) ; ok { // 对于某些实现了接口I 的 // t 是其所拥有的类型 } (2)声明为 interface 类型的变量,可以存储任何实现了 interface 中所有方法的类型的变量 复制代码 代码如下: package main import "fmt" func main() { //interface{} var i interface{} = 100 var s interface{} = "hello" fmt.Printf("i = %d,s = %sn",i,s) s = i fmt.Printf("i = %d,s = %dn",s) } (4)interface组合 将一个 interface1 嵌入到另一个 interface2 的声明中,其作用相当于把 interface1 的函数包含到 interface2 中,但是组合中不同有重复的方法 注: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |