go 的接口类型用于定义一组行为,其中每个行为都由一个方法声明表示。
接口类型中的方法声明只有方法签名而没有方法实体,而方法签名包括且仅包括方法的名称、参数列表和结果列表。
只要一种数据类型的方法集合中包含了Talk接口声明中的所有方法,那么它就一定是Talk接口的实现类型。
type Talk interface{
Hello(username stirng)string
Talk(heard string)(saying string ,end bool, err error)
}
type myTalk string
func (talk myTalk)Hello(username stirng)string{
//省略部分代码
}
func (talk myTalk)Talk(heard string)(saying string ,end bool, err error){
//省略部分代码
}
上面示例中,与myTalk关联的所有方法都是指针方法,这意味着,myTalk类型并不是Talk接口的实现类型,*myTalk类型才是。
一个接口类型的变量可以被赋予任何实现类型的值
eg:
var talk Talk = new(myTalk)
内建函数new的功能是创建一个指定类型的值,并返回指向该值的指针。
若想确定变量talk中值是否属于“myTalk” 类型,则可以用类型断言来判断:
_,ok :=talk.(*myTalk)
go的数据类型之间并不存在继承关系,接口类型也是如此,不过,一个接口型的声明中可以嵌套任意其他接口类型。
type Chatbot interfaxce{
Name()string
Regin()(string,error)
Talk
ReportError(err errors)string
End() error
}
原文:https://www.cnblogs.com/saryli/p/11612803.html