来源:自学PHP网 时间:2019-08-07 16:47 作者:小飞侠 阅读:次
[导读] 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 = %s\n", i, s) s = i fmt.Printf("i = %d, s = %d\n", i, s) } (4)interface组合 将一个 interface1 嵌入到另一个 interface2 的声明中,其作用相当于把 interface1 的函数包含到 interface2 中,但是组合中不同有重复的方法 注: |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com