您的位置:首页 > 编程语言 > Go语言

Golang的interface实践

2017-02-17 19:28 447 查看
这是第二个我在别的语言里面没有见过的实现,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编程-谢孟军
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: