go的interface实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go的interface实践相关的知识,希望对你有一定的参考价值。
这是第二个我在别的语言里面没有见过的实现,go的interface可以说是独树一帜,让我们仔细来实践一下。
interface类型是什么?interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
还是先来看一个例子:
package main import "fmt" type Human struct { name string age int phone string } type Student struct { Human school string loan float32 } type Employee struct { Human company string money float32 } //Human 对象实现Sayhi方法 func (h Human) SayHi() { fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) } //Human 对象实现Sing方法 func (h Human) Sing(lyrics string) { fmt.Println("La la, la la la, la la la ...", lyrics) } func (h Human) Guzzle(beerStein string) { fmt.Println("Guzzle Guzzle Guzzle...", beerStein) } func (e Employee) SayHi() { fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone) } type Men interface { SayHi() Sing(lyrics string) Guzzle(beerStein string) } func main() { var tt Men e := Employee{Human{name: "piperck", age: 25, phone: "182020912309"}, "xcf", 1} tt = e fmt.Println(tt) }
直接看到main函数的地方,我们申明一个Men接口变量tt,然后可以看到,由于Employee通过继承实现了Men接口里面定义的三个函数,所以他可以被赋值给Men类型的任何变量之中。
另外还有一种特别的interface,空interface,空interface(interface{})不包含任何的mehod里面,正因为如此所有类型都实现了空的interface接口。空interface可以存储任意类型的数值。
总结一下就是,只要你实现了这个interface里面定义的方法,那么你就实现了这个interface。申明的这个interface变量就可以存储你的变量类型。 打个比方就是,fmt.Println函数接收一个指定的interface当参数,如果你实现了这个指定interface的所有方法,你就可以将这个实现了interface的东西传给fmt.Println!
Reference:
Go Web编程-谢孟军
以上是关于go的interface实践的主要内容,如果未能解决你的问题,请参考以下文章
[Go] 利用类型断言把interface{}的转换回原类型
Go语言无锁队列组件的实现 (chan/interface/select)